comparison src/share/vm/services/memPtr.cpp @ 6741:33143ee07800

7181995: NMT ON: NMT assertion failure assert(cur_vm->is_uncommit_record() || cur_vm->is_deallocation_record Summary: Fixed virtual memory records merge and promotion logic, should be based on sequence number vs. base address order Reviewed-by: coleenp, acorn
author zgu
date Tue, 11 Sep 2012 20:53:17 -0400
parents e5bf1c79ed5b
children 716c64bda5ba
comparison
equal deleted inserted replaced
6730:5d2156bcb78b 6741:33143ee07800
41 } 41 }
42 42
43 43
44 44
45 bool VMMemRegion::contains(const VMMemRegion* mr) const { 45 bool VMMemRegion::contains(const VMMemRegion* mr) const {
46 assert(base() != 0, "no base address"); 46 assert(base() != 0, "Sanity check");
47 assert(size() != 0 || committed_size() != 0, 47 assert(size() != 0 || committed_size() != 0,
48 "no range"); 48 "Sanity check");
49 address base_addr = base(); 49 address base_addr = base();
50 address end_addr = base_addr + 50 address end_addr = base_addr +
51 (is_reserve_record()? reserved_size(): committed_size()); 51 (is_reserve_record()? reserved_size(): committed_size());
52 if (mr->is_reserve_record()) { 52 if (mr->is_reserve_record()) {
53 if (mr->base() == base_addr && mr->size() == size()) { 53 if (mr->base() == base_addr && mr->size() == size()) {
59 assert(mr->base() != 0 && mr->committed_size() > 0, 59 assert(mr->base() != 0 && mr->committed_size() > 0,
60 "bad record"); 60 "bad record");
61 return (mr->base() >= base_addr && 61 return (mr->base() >= base_addr &&
62 (mr->base() + mr->committed_size()) <= end_addr); 62 (mr->base() + mr->committed_size()) <= end_addr);
63 } else if (mr->is_type_tagging_record()) { 63 } else if (mr->is_type_tagging_record()) {
64 assert(mr->base() != 0, "no base"); 64 assert(mr->base() != NULL, "Sanity check");
65 return mr->base() == base_addr; 65 return (mr->base() >= base_addr && mr->base() < end_addr);
66 } else if (mr->is_release_record()) { 66 } else if (mr->is_release_record()) {
67 assert(mr->base() != 0 && mr->size() > 0, 67 assert(mr->base() != 0 && mr->size() > 0,
68 "bad record"); 68 "bad record");
69 return (mr->base() == base_addr && mr->size() == size()); 69 return (mr->base() == base_addr && mr->size() == size());
70 } else { 70 } else {
71 assert(false, "what happened?"); 71 ShouldNotReachHere();
72 return false; 72 return false;
73 } 73 }
74 } 74 }