hotspot/src/share/vm/runtime/thread.cpp
changeset 13748 c4455a44f974
parent 13744 631fe815def5
child 13857 93015306affa
child 13859 7fe4578493fc
--- 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();