RFR: JDK-8033696: "assert(thread != NULL) failed: just checking" due to Thread::current() and JNI pthread interaction
andreas.eriksson at oracle.com
Mon Feb 10 08:21:41 PST 2014
Could I please get reviews for this change.
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
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.
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.
More information about the hotspot-runtime-dev