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

src/share/vm/services/memSnapshot.cpp

Print this page

        

*** 260,276 **** 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 #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"); #endif remove(); } 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"); --- 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 ! 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