Mercurial > hg > graal-compiler
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 } |