src/share/vm/services/memSnapshot.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File
*** old/src/share/vm/services/memSnapshot.cpp	Thu Apr 25 13:37:36 2013
--- new/src/share/vm/services/memSnapshot.cpp	Thu Apr 25 13:37:35 2013

*** 260,276 **** --- 260,284 ---- assert(rec->is_deallocation_record(), "Sanity check"); VMMemRegion* cur = (VMMemRegion*)current(); assert(cur->is_reserved_region() && cur->contains_region(rec), "Sanity check"); if (rec->is_same_region(cur)) { ! // release whole reserved region and all committed regions within the reserved region #ifdef ASSERT ! VMMemRegion* next_region = (VMMemRegion*)peek_next(); // should not have any committed memory in this reserved region assert(next_region == NULL || !next_region->is_committed_region(), "Sanity check"); ! address low_addr = cur->addr(); + address high_addr = low_addr + cur->size(); #endif remove(); + // remove committed regions within the reserved region + VMMemRegion* next_region = (VMMemRegion*)current(); + while (next_region != NULL && next_region->is_committed_region()) { + assert(next_region->addr() >= low_addr && + next_region->addr() + next_region->size() <= high_addr, + "Range check"); + remove(); + next_region = (VMMemRegion*)current(); + } } else if (rec->addr() == cur->addr() || rec->addr() + rec->size() == cur->addr() + cur->size()) { // released region is at either end of this region cur->exclude_region(rec->addr(), rec->size()); assert(check_reserved_region(), "Integrity check");

src/share/vm/services/memSnapshot.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File