src/solaris/native/sun/awt/awt_GraphicsEnv.c

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this --- 1,7 ---- /* ! * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this
*** 756,765 **** --- 756,767 ---- JNU_ThrowByName(env, "java/awt/AWTError", errmsg); return NULL; } XSetIOErrorHandler(xioerror_handler); + JNU_CallStaticMethodByName(env, NULL, "sun/awt/X11/XErrorHandlerUtil", "init", "(J)V", + ptr_to_jlong(awt_display)); /* set awt_numScreens, and whether or not we're using Xinerama */ xineramaInit(); if (!usingXinerama) {
*** 902,928 **** #ifdef MITSHM static jint canUseShmExt = UNSET_MITSHM; static jint canUseShmExtPixmaps = UNSET_MITSHM; - static jboolean xshmAttachFailed = JNI_FALSE; - - int J2DXErrHandler(Display *display, XErrorEvent *xerr) { - int ret = 0; - if (xerr->minor_code == X_ShmAttach) { - xshmAttachFailed = JNI_TRUE; - } else { - ret = (*xerror_saved_handler)(display, xerr); - } - return ret; - } - jboolean isXShmAttachFailed() { - return xshmAttachFailed; - } - void resetXShmAttachFailed() { - xshmAttachFailed = JNI_FALSE; - } void TryInitMITShm(JNIEnv *env, jint *shmExt, jint *shmPixmaps) { XShmSegmentInfo shminfo; int XShmMajor, XShmMinor; int a, b, c; --- 904,913 ----
*** 961,985 **** strerror(errno)); return; } shminfo.readOnly = True; - resetXShmAttachFailed(); /** ! * The J2DXErrHandler handler will set xshmAttachFailed ! * to JNI_TRUE if any Shm error has occured. */ ! EXEC_WITH_XERROR_HANDLER(J2DXErrHandler, ! XShmAttach(awt_display, &shminfo)); /** * Get rid of the id now to reduce chances of leaking * system resources. */ shmctl(shminfo.shmid, IPC_RMID, 0); ! if (isXShmAttachFailed() == JNI_FALSE) { canUseShmExt = CAN_USE_MITSHM; /* check if we can use shared pixmaps */ XShmQueryVersion(awt_display, &XShmMajor, &XShmMinor, (Bool*)&canUseShmExtPixmaps); canUseShmExtPixmaps = canUseShmExtPixmaps && --- 946,973 ---- strerror(errno)); return; } shminfo.readOnly = True; /** ! * XShmAttachHandler will set its internal flag to JNI_TRUE, if any Shm error occurs. */ ! jobject xShmAttachHandler = JNU_CallStaticMethodByName(env, NULL, "sun/awt/X11/XErrorHandler$XShmAttachHandler", ! "getInstance", "()Lsun/awt/X11/XErrorHandler$XShmAttachHandler;").l; ! JNU_CallMethodByName(env, NULL, xShmAttachHandler, "setErrorOccurredFlag", "(Z)V", JNI_FALSE); ! JNU_CallStaticMethodByName(env, NULL, "sun/awt/X11/XErrorHandlerUtil", "WITH_XERROR_HANDLER", ! "(Lsun/awt/X11/XErrorHandler;)V", xShmAttachHandler); ! XShmAttach(awt_display, &shminfo); ! JNU_CallStaticMethodByName(env, NULL, "sun/awt/X11/XErrorHandlerUtil", "RESTORE_XERROR_HANDLER", "()V"); /** * Get rid of the id now to reduce chances of leaking * system resources. */ shmctl(shminfo.shmid, IPC_RMID, 0); ! if (JNU_CallMethodByName(env, NULL, xShmAttachHandler, "getErrorOccurredFlag", "()Z").z == JNI_FALSE) { canUseShmExt = CAN_USE_MITSHM; /* check if we can use shared pixmaps */ XShmQueryVersion(awt_display, &XShmMajor, &XShmMinor, (Bool*)&canUseShmExtPixmaps); canUseShmExtPixmaps = canUseShmExtPixmaps &&