changeset 8653:61d3e001dee6 icedtea-2.6.1

PR2521: Systems with a GLib without libgio segfault when obtaining proxy information
author andrew
date Tue, 21 Jul 2015 01:32:24 +0100
parents c1787ebf3df9
children 08d0296ae3dd
files src/solaris/native/common/deps/glib2/gio_fp.c src/solaris/native/common/deps/glib2/glib_fp.h src/solaris/native/sun/net/spi/DefaultProxySelector.c
diffstat 3 files changed, 15 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/solaris/native/common/deps/glib2/gio_fp.c	Mon Jul 20 00:11:26 2015 +0100
+++ b/src/solaris/native/common/deps/glib2/gio_fp.c	Tue Jul 21 01:32:24 2015 +0100
@@ -55,6 +55,7 @@
         if (gio_handle == NULL) {
             gio_handle = dlopen("libgio-2.0.so.0", RTLD_LAZY);
             if (gio_handle == NULL) {
+                NATDEBUG("Couldn't find libgio; returning false\n")
                 return JNI_FALSE;
             }
         }
@@ -124,7 +125,14 @@
 
 jboolean gsettings_init()
 {
-    gio_init();
+    jboolean gio_init_result;
+
+    gio_init_result = gio_init();
+    if (gio_init_result == JNI_FALSE)
+    {
+        NATDEBUG("gio_init failed; returning false\n")
+        return JNI_FALSE;
+    }
 
     if (settings_new != NULL &&
         settings_get_boolean != NULL &&
--- a/src/solaris/native/common/deps/glib2/glib_fp.h	Mon Jul 20 00:11:26 2015 +0100
+++ b/src/solaris/native/common/deps/glib2/glib_fp.h	Tue Jul 21 01:32:24 2015 +0100
@@ -54,12 +54,11 @@
 } GError;
 #endif
 
-#ifndef g_type_init
+#ifndef USE_SYSTEM_GIO
+#ifndef USE_SYSTEM_GCONF
 #define g_type_init (*type_init)
+#define g_free (*gfree)
 #endif
-
-#ifndef g_free
-#define g_free (*gfree)
 #endif
 
 typedef void (*type_init_func)(void);
--- a/src/solaris/native/sun/net/spi/DefaultProxySelector.c	Mon Jul 20 00:11:26 2015 +0100
+++ b/src/solaris/native/sun/net/spi/DefaultProxySelector.c	Tue Jul 21 01:32:24 2015 +0100
@@ -231,6 +231,9 @@
       }
     } else {
       if (gconf_client == NULL) {
+#ifdef NATIVE_SUPPORT_DEBUG
+	printf("g_type_init=%p\n", g_type_init);
+#endif
 	g_type_init();
 	gconf_client = gconf_client_get_default();
       }