RFR: JDK-8033696: "assert(thread != NULL) failed: just checking" due to Thread::current() and JNI pthread interaction
Andreas Eriksson
andreas.eriksson at oracle.com
Tue Mar 4 00:12:51 UTC 2014
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