< 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 >