# HG changeset patch # User zgu # Date 1347641750 14400 # Node ID c4455a44f97472d577898b568ee69ea23e4dac04 # Parent 7dd9c86d03e1b2585393e9bf91bc5dbd195444c5 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 diff -r 7dd9c86d03e1 -r c4455a44f974 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();