Relates :
|
|
Relates :
|
|
Relates :
|
|
Relates :
|
JNI code is using pthread_key_create with a destructor to detach the thread from the JVM when the thread is exiting. This solution works well when running on Solaris or a 32 bit JVM on Linux, but when run on 64 bit JVM on Linux the threads hang when detaching. For 64 bit Linux 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. With a product build this breaks locks/monitors, and the threads hang. With a debug build an assert in Thread::current() is hit instead. Everything works if detachCurrentThread is called from the main logic instead.
|