United StatesChange Country, Oracle Worldwide Web Sites Communities I am a... I want to...
Bug ID: JDK-7188755 Crash due to missing synchronization on gconf_client in DefaultProxySelector.c
JDK-7188755 : Crash due to missing synchronization on gconf_client in DefaultProxySelector.c

Details
Type:
Bug
Submit Date:
2012-08-02
Status:
Closed
Updated Date:
2013-08-02
Project Name:
JDK
Resolved Date:
2012-09-05
Component:
core-libs
OS:
linux_ubuntu,linux,generic
Sub-Component:
java.net
CPU:
x86,unknown,generic
Priority:
P2
Resolution:
Fixed
Affected Versions:
6u10,6u20,7
Fixed Versions:

Related Reports
Backport:
Backport:
Duplicate:

Sub Tasks

Description
Using the system property 'java.net.useSystemProxies', JDK 7 crashes on 
OpenBSD 5.2.

$ /usr/local/jre-1.7.0/bin/java -version
openjdk version "1.7.0_03"
OpenJDK Runtime Environment (build 1.7.0_03-b04)
OpenJDK Server VM (build 22.1-b02, mixed mode)

$ /usr/local/jre-1.7.0/bin/java -cp . Crash
2538: assertion failed "allocator->lock_loc == NULL" file 
"/usr/ports/pobj/dbus-1.6.2/dbus-1.6.2/dbus/dbus-dataslot.c" line 79 
function _dbus_data_slot_allocator_alloc
2538: assertion failed "allocator->lock_loc == NULL" file 
"/usr/ports/pobj/dbus-1.6.2/dbus-1.6.2/dbus/dbus-dataslot.c" line 79 
function _dbus_data_slot_allocator_alloc
2538: assertion failed "allocator->lock_loc == NULL" file 
"/usr/ports/pobj/dbus-1.6.2/dbus-1.6.2/dbus/dbus-dataslot.c" line 79 
function _dbus_data_slot_allocator_alloc
2538: assertion failed "allocator->lock_loc == NULL" file 
"/usr/ports/pobj/dbus-1.6.2/dbus-1.6.2/dbus/dbus-dataslot.c" line 79 
function _dbus_data_slot_allocator_alloc
   D-Bus not compiled with backtrace support so unable to print a backtrace
   D-Bus not compiled with backtrace support so unable to print a backtrace

$ /usr/local/jre-1.7.0/bin/java -cp . Crash
27421: assertion failed "!(connection)->have_connection_lock" file 
"/usr/ports/pobj/dbus-1.6.2/dbus-1.6.2/dbus/dbus-connection.c" line 1133 
function _dbus_connection_acquire_io_path
   D-Bus not compiled with backtrace support so unable to print a backtrace
Abort trap (core dumped)

Looking at 
'openjdk/jdk/src/solaris/native/sun/net/spi/DefaultProxySelector.c', 
there is a 'static void* gconf_client' which is initialized by calling 
'gconf_client_get_default' from 'libgconf-2'. Uses of that client are 
not protected against concurrent accesses by multiple threads although 
that gconf client is not thread-safe. Trying to add some protection 
myself resulted in the attached patch. Rebuilding JDK 1.7 with this 
patch applied, the 'gconf'/'dbus' related crashes no longer happen.

see discussion on jdk7u-dev, and subsequently on net-dev mailing lists:

http://mail.openjdk.java.net/pipermail/jdk7u-dev/2012-August/003911.html
http://mail.openjdk.java.net/pipermail/net-dev/2012-August/004610.html

                                    

Comments
EVALUATION

JDK8 Changeset: e7d125f2575b
Author:    chegar
Date:      2012-08-12 22:56 +0100
URL:       http://hg.openjdk.java.net/jdk8/tl/jdk/rev/e7d125f2575b

7188755: Crash due to missing synchronization on gconf_client in DefaultProxySelector.c
Reviewed-by: chegar
Contributed-by: Christian Schulte <###@###.###>

! src/share/classes/sun/net/spi/DefaultProxySelector.java
+ test/java/net/ProxySelector/MultiThreadedSystemProxies.java
                                     
2012-08-13
MultiThreadedSystemProxies passes.
                                     
2013-08-02



Hardware and Software, Engineered to Work Together