< prev index next >
src/java.desktop/unix/native/libawt_xawt/awt/gtk2_interface.c
Print this page
rev 14364 : 8156020: 8145547 breaks AIX and and uses RTLD_NOLOAD incorrectly
*** 310,337 ****
longjmp(j, NO_SYMBOL_EXCEPTION);
return result;
}
! gboolean gtk2_check(const char* lib_name, int flags)
{
if (gtk2_libhandle != NULL) {
/* We've already successfully opened the GTK libs, so return true. */
return TRUE;
} else {
void *lib = NULL;
! lib = dlopen(lib_name, flags);
if (lib == NULL) {
return FALSE;
}
- if (flags & RTLD_NOLOAD) {
- return TRUE;
- }
-
fp_gtk_check_version = dlsym(lib, "gtk_check_version");
/* Check for GTK 2.2+ */
if (!fp_gtk_check_version(2, 2, 0)) {
return TRUE;
}
--- 310,346 ----
longjmp(j, NO_SYMBOL_EXCEPTION);
return result;
}
! gboolean gtk2_check(const char* lib_name, gboolean load)
{
if (gtk2_libhandle != NULL) {
/* We've already successfully opened the GTK libs, so return true. */
return TRUE;
} else {
void *lib = NULL;
! #ifdef RTLD_NOLOAD
! /* Just check if gtk libs are already in the process space */
! lib = dlopen(lib_name, RTLD_LAZY | RTLD_NOLOAD);
! if (!load || lib != NULL) {
! return lib != NULL;
! }
! #else
! #ifdef _AIX
! /* On AIX we could implement this with the help of loadquery(L_GETINFO, ..) */
! /* (see reload_table() in hotspot/src/os/aix/vm/loadlib_aix.cpp) but it is */
! /* probably not worth it because most AIX servers don't have GTK libs anyway */
! #endif
! #endif
+ lib = dlopen(lib_name, RTLD_LAZY | RTLD_LOCAL);
if (lib == NULL) {
return FALSE;
}
fp_gtk_check_version = dlsym(lib, "gtk_check_version");
/* Check for GTK 2.2+ */
if (!fp_gtk_check_version(2, 2, 0)) {
return TRUE;
}
< prev index next >