1.1 --- a/src/share/vm/services/memSnapshot.cpp Tue Nov 13 15:14:27 2012 -0500 1.2 +++ b/src/share/vm/services/memSnapshot.cpp Fri Nov 16 09:05:19 2012 -0500 1.3 @@ -261,17 +261,19 @@ 1.4 VMMemRegion* cur = (VMMemRegion*)current(); 1.5 assert(cur->is_reserved_region() && cur->contains_region(rec), 1.6 "Sanity check"); 1.7 + if (rec->is_same_region(cur)) { 1.8 + // release whole reserved region 1.9 #ifdef ASSERT 1.10 - VMMemRegion* next_reg = (VMMemRegion*)peek_next(); 1.11 - // should not have any committed memory in this reserved region 1.12 - assert(next_reg == NULL || !next_reg->is_committed_region(), "Sanity check"); 1.13 + VMMemRegion* next_region = (VMMemRegion*)peek_next(); 1.14 + // should not have any committed memory in this reserved region 1.15 + assert(next_region == NULL || !next_region->is_committed_region(), "Sanity check"); 1.16 #endif 1.17 - if (rec->is_same_region(cur)) { 1.18 remove(); 1.19 } else if (rec->addr() == cur->addr() || 1.20 rec->addr() + rec->size() == cur->addr() + cur->size()) { 1.21 // released region is at either end of this region 1.22 cur->exclude_region(rec->addr(), rec->size()); 1.23 + assert(check_reserved_region(), "Integrity check"); 1.24 } else { // split the reserved region and release the middle 1.25 address high_addr = cur->addr() + cur->size(); 1.26 size_t sz = high_addr - rec->addr(); 1.27 @@ -280,10 +282,14 @@ 1.28 if (MemTracker::track_callsite()) { 1.29 MemPointerRecordEx tmp(rec->addr() + rec->size(), cur->flags(), sz, 1.30 ((VMMemRegionEx*)cur)->pc()); 1.31 - return insert_reserved_region(&tmp); 1.32 + bool ret = insert_reserved_region(&tmp); 1.33 + assert(!ret || check_reserved_region(), "Integrity check"); 1.34 + return ret; 1.35 } else { 1.36 MemPointerRecord tmp(rec->addr() + rec->size(), cur->flags(), sz); 1.37 - return insert_reserved_region(&tmp); 1.38 + bool ret = insert_reserved_region(&tmp); 1.39 + assert(!ret || check_reserved_region(), "Integrity check"); 1.40 + return ret; 1.41 } 1.42 } 1.43 return true;