< prev index next >

src/java.desktop/unix/native/libawt_xawt/awt/gtk2_interface.c

Print this page

        

*** 815,871 **** AWT_LOCK(); handler = XSetErrorHandler(NULL); io_handler = XSetIOErrorHandler(NULL); if (fp_gtk_check_version(2, 2, 0) == NULL) { - jclass clazz = (*env)->FindClass(env, "sun/misc/GThreadHelper"); - jmethodID mid_getAndSetInitializationNeededFlag = - (*env)->GetStaticMethodID(env, clazz, "getAndSetInitializationNeededFlag", "()Z"); - jmethodID mid_lock = (*env)->GetStaticMethodID(env, clazz, "lock", "()V"); - jmethodID mid_unlock = (*env)->GetStaticMethodID(env, clazz, "unlock", "()V"); - - // Init the thread system to use GLib in a thread-safe mode - (*env)->CallStaticVoidMethod(env, clazz, mid_lock); - if ((*env)->ExceptionCheck(env)) { - AWT_UNLOCK(); - return FALSE; - } // Calling g_thread_init() multiple times leads to crash on GLib < 2.24 // We can use g_thread_get_initialized () but it is available only for ! // GLib >= 2.20. We rely on GThreadHelper for GLib < 2.20. gboolean is_g_thread_get_initialized = FALSE; if (GLIB_CHECK_VERSION(2, 20, 0)) { is_g_thread_get_initialized = fp_g_thread_get_initialized(); } - if (!(*env)->CallStaticBooleanMethod(env, clazz, mid_getAndSetInitializationNeededFlag)) { if (!is_g_thread_get_initialized) { fp_g_thread_init(NULL); } //According the GTK documentation, gdk_threads_init() should be //called before gtk_init() or gtk_init_check() fp_gdk_threads_init(); } - jthrowable pendExcpn = NULL; - // Exception raised during mid_getAndSetInitializationNeededFlag - // call is saved and error handling is done - // after unlock method is called - if ((pendExcpn = (*env)->ExceptionOccurred(env)) != NULL) { - (*env)->ExceptionClear(env); - } - (*env)->CallStaticVoidMethod(env, clazz, mid_unlock); - if (pendExcpn != NULL) { - (*env)->Throw(env, pendExcpn); - } - // check if any exception occured during mid_unlock call - if ((*env)->ExceptionCheck(env)) { - AWT_UNLOCK(); - return FALSE; - } - } result = (*fp_gtk_init_check)(NULL, NULL); XSetErrorHandler(handler); XSetIOErrorHandler(io_handler); AWT_UNLOCK(); --- 815,841 ---- AWT_LOCK(); handler = XSetErrorHandler(NULL); io_handler = XSetIOErrorHandler(NULL); if (fp_gtk_check_version(2, 2, 0) == NULL) { // Calling g_thread_init() multiple times leads to crash on GLib < 2.24 // We can use g_thread_get_initialized () but it is available only for ! // GLib >= 2.20. gboolean is_g_thread_get_initialized = FALSE; if (GLIB_CHECK_VERSION(2, 20, 0)) { is_g_thread_get_initialized = fp_g_thread_get_initialized(); } if (!is_g_thread_get_initialized) { fp_g_thread_init(NULL); } //According the GTK documentation, gdk_threads_init() should be //called before gtk_init() or gtk_init_check() fp_gdk_threads_init(); } result = (*fp_gtk_init_check)(NULL, NULL); XSetErrorHandler(handler); XSetIOErrorHandler(io_handler); AWT_UNLOCK();
< prev index next >