RFR: JDK-8033696: "assert(thread != NULL) failed: just checking" due to Thread::current() and JNI pthread interaction

David Holmes david.holmes at oracle.com
Wed Mar 26 09:38:09 UTC 2014


Still seems okay to me.

Thanks,
David

On 25/03/2014 7:55 PM, Andreas Eriksson wrote:
> Hi,
>
> Could I get some eyes on this new webrev?
>
> Thanks,
> Andreas
>
> On 2014-03-04 01:12, Andreas Eriksson wrote:
>> That output was because the VMThread didn't reset it's TLS before
>> exiting (presumably since the VM is shutting down anyway).
>> This meant that the thread pointer destructor was run until the
>> pthread implementation gave up.
>> I added code that sets the thread pointer to NULL before exiting the
>> VMThread, ensuring the thread pointer destructor is never called for
>> the exiting VMThread.
>>
>> A new updated webrev can be found here:
>> http://cr.openjdk.java.net/~aeriksso/8033696/webrev.01/
>>
>> I also removed the bug reference from the comments, since I got the
>> feeling that it's usually discouraged.
>>
>> Thanks,
>> Andreas
>>
>> On 2014-02-27 13:34, Andreas Eriksson wrote:
>>> Oh, sorry, I misread your mail.
>>>
>>> I will look into the pthread output from java -version.
>>>
>>> Thread 80103f400 has exited with leftover thread-specific data after 4
>>> destructor iterations
>>>
>>> Thanks,
>>> Andreas
>>>
>>> On 2014-02-27 12:39, Dmitry Samersoff wrote:
>>>> Andreas,
>>>>
>>>> I's not growing - always only two threads.
>>>>
>>>> -Dmitry
>>>>
>>>> On 2014-02-27 14:23, Andreas Eriksson wrote:
>>>>> Thanks Dmitry.
>>>>>
>>>>> There are no crashes, only an assert that is hit if running with a
>>>>> debug
>>>>> build.
>>>>> Otherwise the active threads keep growing, like you are seeing.
>>>>>
>>>>> It is worrying that they keep growing with the patch as well.
>>>>> I will have to look at it and see what can be done.
>>>>>
>>>>> Regards,
>>>>> Andreas
>>>>>
>>>>> On 2014-02-26 21:14, Dmitry Samersoff wrote:
>>>>>> Andreas,
>>>>>>
>>>>>> With JDK7 I didn't observe any crash with or without your patch.
>>>>>> Without the patch the number of active threads constantly grows,
>>>>>> with patch it remains the same.
>>>>>>
>>>>>>
>>>>>> uname -a
>>>>>> FreeBSD samersoff.net 9.2-RELEASE FreeBSD 9.2-RELEASE #1: Thu Jan  2
>>>>>> 02:15:13 MSK 2014     dms at minext:/sys/amd64/compile/MIRCAT amd64
>>>>>>
>>>>>>
>>>>>> With patch:
>>>>>>
>>>>>> #java -version
>>>>>>
>>>>>> openjdk version "1.7.0_45"
>>>>>> OpenJDK Runtime Environment (build 1.7.0_45-b18)
>>>>>> OpenJDK 64-Bit Server VM (build 24.45-b08, mixed mode)
>>>>>> Thread 80103f400 has exited with leftover thread-specific data
>>>>>> after 4
>>>>>> destructor iterations
>>>>>>
>>>>>> #$JAVA_HOME/bin/java -Djava.library.path=$NATIVE
>>>>>> com.test.callback.App
>>>>>>
>>>>>> Java callback: native thread: 34376799232, java thread: Thread-391, 2
>>>>>> active threads
>>>>>> Successfully detached native thread 0x801045400
>>>>>> Deleting callback
>>>>>>
>>>>>>
>>>>>> Without patch:
>>>>>>
>>>>>> #/opt/openjdk7/bin/java -version
>>>>>>
>>>>>> openjdk version "1.7.0_25"
>>>>>> OpenJDK Runtime Environment (build 1.7.0_25-b15)
>>>>>> OpenJDK 64-Bit Server VM (build 23.21-b01, mixed mode)
>>>>>>
>>>>>> #/opt/openjdk7/bin/java -Djava.library.path=$NATIVE
>>>>>> com.test.callback.App
>>>>>>
>>>>>> Java callback: native thread: 34376788992, java thread:
>>>>>> Thread-402, 404
>>>>>> active threads
>>>>>> Successfully detached native thread 0x801042c00
>>>>>> Deleting callback
>>>>>>
>>>>>> -Dmitry
>>>>>>
>>>>>>
>>>>>> On 2014-02-10 20:21, Andreas Eriksson wrote:
>>>>>>> Hi,
>>>>>>>
>>>>>>> Could I please get reviews for this change.
>>>>>>> JBS: https://bugs.openjdk.java.net/browse/JDK-8033696
>>>>>>> Webrev: http://cr.openjdk.java.net/~aeriksso/8033696/webrev.00/
>>>>>>> Mail discussion:
>>>>>>> http://mail.openjdk.java.net/pipermail/hotspot-runtime-dev/2014-February/010759.html
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Summary:
>>>>>>> JNI code is using pthread_key_create with a destructor to detach the
>>>>>>> thread from the JVM when the thread is exiting.
>>>>>>> For some flavors of Linux and BSD the JVM is also using the
>>>>>>> pthread_key_create, to store the Thread::current() value in a thread
>>>>>>> local storage.
>>>>>>> Since the thread local storage containing the thread pointer is
>>>>>>> erased
>>>>>>> (by pthread) before the JNI destructor runs, we run
>>>>>>> detachCurrentThread
>>>>>>> on a thread that has NULL as current thread.
>>>>>>> This fix uses a destructor for the thread pointer that restores the
>>>>>>> value, so that the JNI destructor can run detachCurrentThread
>>>>>>> successfully.
>>>>>>> More info in JBS.
>>>>>>>
>>>>>>> Testing:
>>>>>>> Native code regtest attached to JBS tested on Linux, but not on Mac
>>>>>>> since I don't have access to one.
>>>>>>> JPRT ran without a problem.
>>>>>>>
>>>>>>> Regards,
>>>>>>> Andreas
>>>>
>>>
>>
>


More information about the hotspot-runtime-dev mailing list