RFR: JDK-8033696: "assert(thread != NULL) failed: just checking" due to Thread::current() and JNI pthread interaction
Andreas Eriksson
andreas.eriksson at oracle.com
Wed Apr 2 15:26:46 UTC 2014
Thanks David.
Could I get a second review as well?
Thanks,
Andreas
On 2014-03-26 10:38, David Holmes wrote:
> 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