--- old/src/solaris/native/sun/java2d/opengl/GLXSurfaceData.c 2013-02-18 18:36:43.000000000 +0300 +++ new/src/solaris/native/sun/java2d/opengl/GLXSurfaceData.c 2013-02-18 18:36:43.000000000 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 @@ -48,8 +48,6 @@ extern void OGLSD_SetNativeDimensions(JNIEnv *env, OGLSDOps *oglsdo, jint w, jint h); -jboolean surfaceCreationFailed = JNI_FALSE; - #endif /* !HEADLESS */ JNIEXPORT void JNICALL @@ -348,18 +346,6 @@ return JNI_TRUE; } -static int -GLXSD_BadAllocXErrHandler(Display *display, XErrorEvent *xerr) -{ - int ret = 0; - if (xerr->error_code == BadAlloc) { - surfaceCreationFailed = JNI_TRUE; - } else { - ret = (*xerror_saved_handler)(display, xerr); - } - return ret; -} - JNIEXPORT jboolean JNICALL Java_sun_java2d_opengl_GLXSurfaceData_initPbuffer (JNIEnv *env, jobject glxsd, @@ -402,12 +388,14 @@ attrlist[1] = width; attrlist[3] = height; - surfaceCreationFailed = JNI_FALSE; - EXEC_WITH_XERROR_HANDLER( - GLXSD_BadAllocXErrHandler, - pbuffer = j2d_glXCreatePbuffer(awt_display, - glxinfo->fbconfig, attrlist)); - if ((pbuffer == 0) || surfaceCreationFailed) { + AWT_LOCK(); + jboolean errorOccurredFlag = JNI_FALSE; + EXEC_WITH_XERROR_HANDLER(env, "sun/awt/X11/XErrorHandler$GLXBadAllocHandler", + "()Lsun/awt/X11/XErrorHandler$GLXBadAllocHandler;", JNI_TRUE, errorOccurredFlag, + pbuffer = j2d_glXCreatePbuffer(awt_display, glxinfo->fbconfig, attrlist)); + AWT_UNLOCK(); + + if ((pbuffer == 0) || errorOccurredFlag) { J2dRlsTraceLn(J2D_TRACE_ERROR, "GLXSurfaceData_initPbuffer: could not create glx pbuffer"); return JNI_FALSE;