Mercurial > hg > truffle
comparison src/share/vm/gc_implementation/shared/vmGCOperations.cpp @ 1392:bdb5361c461c
6897143: Stress test crashes during HeapInspection using ParallelGC.
Summary: ensure_parsability() must be called even if GC_locker prevents GC.
Reviewed-by: ysr, chrisphi
author | kevinw |
---|---|
date | Fri, 16 Apr 2010 17:36:37 +0100 |
parents | c6c601a0f2d6 |
children | fb1a39993f69 |
comparison
equal
deleted
inserted
replaced
1390:f9ec1e4bbb44 | 1392:bdb5361c461c |
---|---|
113 } | 113 } |
114 | 114 |
115 void VM_GC_HeapInspection::doit() { | 115 void VM_GC_HeapInspection::doit() { |
116 HandleMark hm; | 116 HandleMark hm; |
117 CollectedHeap* ch = Universe::heap(); | 117 CollectedHeap* ch = Universe::heap(); |
118 ch->ensure_parsability(false); // must happen, even if collection does | |
119 // not happen (e.g. due to GC_locker) | |
118 if (_full_gc) { | 120 if (_full_gc) { |
119 ch->collect_as_vm_thread(GCCause::_heap_inspection); | 121 // The collection attempt below would be skipped anyway if |
120 } else { | 122 // the gc locker is held. The following dump may then be a tad |
121 // make the heap parsable (no need to retire TLABs) | 123 // misleading to someone expecting only live objects to show |
122 ch->ensure_parsability(false); | 124 // up in the dump (see CR 6944195). Just issue a suitable warning |
125 // in that case and do not attempt to do a collection. | |
126 // The latter is a subtle point, because even a failed attempt | |
127 // to GC will, in fact, induce one in the future, which we | |
128 // probably want to avoid in this case because the GC that we may | |
129 // be about to attempt holds value for us only | |
130 // if it happens now and not if it happens in the eventual | |
131 // future. | |
132 if (GC_locker::is_active()) { | |
133 warning("GC locker is held; pre-dump GC was skipped"); | |
134 } else { | |
135 ch->collect_as_vm_thread(GCCause::_heap_inspection); | |
136 } | |
123 } | 137 } |
124 HeapInspection::heap_inspection(_out, _need_prologue /* need_prologue */); | 138 HeapInspection::heap_inspection(_out, _need_prologue /* need_prologue */); |
125 } | 139 } |
126 | 140 |
127 | 141 |