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 25 09:55:42 UTC 2014
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