changeset 3622:6dfc6a541338

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
author zgu
date Fri, 14 Sep 2012 12:55:50 -0400
parents 7edbe32b9802
children 9b076bc3ab67
files src/share/vm/runtime/thread.cpp
diffstat 1 files changed, 8 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/vm/runtime/thread.cpp	Thu Sep 13 22:09:16 2012 +0200
+++ b/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();