< prev index next >
src/share/vm/runtime/vmThread.cpp
Print this page
@@ -306,14 +306,18 @@
MutexLockerEx ml(_terminate_lock, Mutex::_no_safepoint_check_flag);
_terminated = true;
_terminate_lock->notify();
}
- // Deletion must be done synchronously by the JNI DestroyJavaVM thread
- // so that the VMThread deletion completes before the main thread frees
- // up the CodeHeap.
+ // Deletion is done synchronously by the JNI DestroyJavaVM thread
+ // so that the VMThread deletion doesn't race with that thread as it
+ // tears down VM resources. That means 'this' may already have been
+ // deallocated so we can't reference it. However we must do some cleanup
+ // ourselves before allowing the native thread to terminate
+ ThreadLocalStorage::set_thread(NULL);
+
}
// Notify the VMThread that the last non-daemon JavaThread has terminated,
// and wait until operation is performed.
< prev index next >