RFR(xxs): 8213236: A partial removed/deleted JavaThread cannot transition
Robbin Ehn
robbin.ehn at oracle.com
Thu Nov 1 11:57:44 UTC 2018
Hi all please review,
In 8212933 we moved the cancellation of a handshake to the VM thread, for sanity
an assert was added to make sure the JavaThread do not cancel. (technically this
works also, but to keep a simple model it should be done by the VM thread)
A JavaThread that is terminated but not yet free should not follow the safepoint
protocol. Since the VM thread running the safepoint cannot see such a thread
it's confusing and error-prone doing safepoint checks and transitions from a
thread not 'attached' to the VM.
Issue:
https://bugs.openjdk.java.net/browse/JDK-8213236
Code:
diff -r 13ad2bfee99e src/hotspot/share/runtime/vmThread.cpp
--- a/src/hotspot/share/runtime/vmThread.cpp Thu Nov 01 09:57:57 2018 +0100
+++ b/src/hotspot/share/runtime/vmThread.cpp Thu Nov 01 12:40:47 2018 +0100
@@ -319,7 +319,9 @@
// Notify the VMThread that the last non-daemon JavaThread has terminated,
// and wait until operation is performed.
void VMThread::wait_for_vm_thread_exit() {
- { MutexLocker mu(VMOperationQueue_lock);
+ assert(Thread::current()->is_Java_thread(), "Should be a JavaThread");
+ assert(((JavaThread*)Thread::current())->is_terminated(), "Should be off
threadslist");
+ { MutexLockerEx mu(VMOperationQueue_lock, Mutex::_no_safepoint_check_flag);
_should_terminate = true;
VMOperationQueue_lock->notify();
}
Passes t1-2.
Thanks Robbin
More information about the hotspot-runtime-dev
mailing list