6897143: Stress test crashes during HeapInspection using ParallelGC
Ensure_parsability() must be called even if GC_locker prevents GC. Reviewed-by: ysr, chrisphi
This commit is contained in:
parent
89dcd228da
commit
d132f8e1c6
@ -115,11 +115,25 @@ bool VM_GC_HeapInspection::skip_operation() const {
|
|||||||
void VM_GC_HeapInspection::doit() {
|
void VM_GC_HeapInspection::doit() {
|
||||||
HandleMark hm;
|
HandleMark hm;
|
||||||
CollectedHeap* ch = Universe::heap();
|
CollectedHeap* ch = Universe::heap();
|
||||||
|
ch->ensure_parsability(false); // must happen, even if collection does
|
||||||
|
// not happen (e.g. due to GC_locker)
|
||||||
if (_full_gc) {
|
if (_full_gc) {
|
||||||
ch->collect_as_vm_thread(GCCause::_heap_inspection);
|
// The collection attempt below would be skipped anyway if
|
||||||
|
// the gc locker is held. The following dump may then be a tad
|
||||||
|
// misleading to someone expecting only live objects to show
|
||||||
|
// up in the dump (see CR 6944195). Just issue a suitable warning
|
||||||
|
// in that case and do not attempt to do a collection.
|
||||||
|
// The latter is a subtle point, because even a failed attempt
|
||||||
|
// to GC will, in fact, induce one in the future, which we
|
||||||
|
// probably want to avoid in this case because the GC that we may
|
||||||
|
// be about to attempt holds value for us only
|
||||||
|
// if it happens now and not if it happens in the eventual
|
||||||
|
// future.
|
||||||
|
if (GC_locker::is_active()) {
|
||||||
|
warning("GC locker is held; pre-dump GC was skipped");
|
||||||
} else {
|
} else {
|
||||||
// make the heap parsable (no need to retire TLABs)
|
ch->collect_as_vm_thread(GCCause::_heap_inspection);
|
||||||
ch->ensure_parsability(false);
|
}
|
||||||
}
|
}
|
||||||
HeapInspection::heap_inspection(_out, _need_prologue /* need_prologue */);
|
HeapInspection::heap_inspection(_out, _need_prologue /* need_prologue */);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user