7198529: NPG: assert with NMT code in Thread destructor

Thread stack's base address can be NULL if it is not started or exited before recording the base

Reviewed-by: kvn, fparain
This commit is contained in:
Zhengyu Gu 2012-09-14 12:55:50 -04:00
parent 00c30b04f4
commit 119c20297b

View File

@ -328,8 +328,14 @@ Thread::~Thread() {
// 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();