< prev index next >

src/hotspot/share/runtime/thread.cpp

Print this page

        

*** 4425,4434 **** --- 4425,4440 ---- before_exit(thread); thread->exit(true); + // We are no longer on the main thread list but could still be in a + // secondary list where another thread may try to interact with us. + // So wait until all such interactions are complete before we bring + // the VM to the termination safepoint. + ThreadsSMRSupport::wait_until_not_protected(thread); + // Stop VM thread. { // 4945125 The vm thread comes to a safepoint during exit. // GC vm_operations can get caught at the safepoint, and the // heap is unparseable if they are caught. Grab the Heap_lock
*** 4464,4488 **** notify_vm_shutdown(); // exit_globals() will delete tty exit_globals(); - // We are here after VM_Exit::set_vm_exited() so we can't call - // thread->smr_delete() or we will block on the Threads_lock. We - // must check that there are no active references to this thread - // before attempting to delete it. A thread could be waiting on - // _handshake_turn_sem trying to execute a direct handshake with - // this thread. - if (!ThreadsSMRSupport::is_a_protected_JavaThread(thread)) { delete thread; - } else { - // Clear value for _thread_key in TLS to prevent, depending - // on pthreads implementation, possible execution of - // thread-specific destructor in infinite loop at thread - // exit. - Thread::clear_thread_current(); - } #if INCLUDE_JVMCI if (JVMCICounterSize > 0) { FREE_C_HEAP_ARRAY(jlong, JavaThread::_jvmci_old_thread_counters); } --- 4470,4480 ----
< prev index next >