Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-7188755

Crash due to missing synchronization on gconf_client in DefaultProxySelector.c

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: P2 P2
    • 8
    • 6u10, 6u20, 7
    • core-libs
    • b55
    • generic, unknown, x86
    • generic, linux, linux_ubuntu
    • Verified

        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

              chegar Chris Hegarty
              chegar Chris Hegarty
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

                Created:
                Updated:
                Resolved:
                Imported:
                Indexed: