7198529: NPG: assert with NMT code in Thread destructor
authorzgu
Fri, 14 Sep 2012 12:55:50 -0400
changeset 13748 c4455a44f974
parent 13747 7dd9c86d03e1
child 13749 ab29bec425bb
7198529: NPG: assert with NMT code in Thread destructor Summary: Thread stack's base address can be NULL if it is not started or exited before recording the base Reviewed-by: kvn, fparain
hotspot/src/share/vm/runtime/thread.cpp
--- a/hotspot/src/share/vm/runtime/thread.cpp	Thu Sep 13 22:09:16 2012 +0200
+++ b/hotspot/src/share/vm/runtime/thread.cpp	Fri Sep 14 12:55:50 2012 -0400
@@ -328,8 +328,14 @@
   // Reclaim the objectmonitors from the omFreeList of the moribund thread.
   ObjectSynchronizer::omFlush (this) ;
 
-  address low_stack_addr = stack_base() - stack_size();
-  MemTracker::release_thread_stack(low_stack_addr, stack_size(), this);
+  // stack_base can be NULL if the thread is never started or exited before
+  // record_stack_base_and_size called. Although, we would like to ensure
+  // that all started threads do call record_stack_base_and_size(), there is
+  // not proper way to enforce that.
+  if (_stack_base != NULL) {
+    address low_stack_addr = stack_base() - stack_size();
+    MemTracker::release_thread_stack(low_stack_addr, stack_size(), this);
+  }
 
   // deallocate data structures
   delete resource_area();