Skip to content

Commit 4701688

Browse files
committed
8231293: Shenandoah: Traversal should not revive dead weak roots
Reviewed-by: shade
1 parent 8551294 commit 4701688

File tree

2 files changed

+16
-8
lines changed

2 files changed

+16
-8
lines changed

src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.cpp

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -266,9 +266,19 @@ oop ShenandoahBarrierSet::oop_load_from_native_barrier(oop obj) {
266266
return NULL;
267267
}
268268

269-
if (_heap->is_evacuation_in_progress() &&
270-
!_heap->complete_marking_context()->is_marked(obj)) {
271-
return NULL;
269+
ShenandoahMarkingContext* const marking_context = _heap->marking_context();
270+
271+
if (_heap->is_evacuation_in_progress()) {
272+
// Normal GC
273+
if (!marking_context->is_marked(obj)) {
274+
return NULL;
275+
}
276+
} else if (_heap->is_concurrent_traversal_in_progress()) {
277+
// Traversal GC
278+
if (marking_context->is_complete() &&
279+
!marking_context->is_marked(resolve_forwarded_not_null(obj))) {
280+
return NULL;
281+
}
272282
}
273283

274284
return load_reference_barrier_not_null(obj);

src/hotspot/share/gc/shenandoah/shenandoahTraversalGC.cpp

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -593,11 +593,6 @@ void ShenandoahTraversalGC::final_traversal_collection() {
593593
weak_refs_work();
594594
}
595595

596-
if (!_heap->cancelled_gc()) {
597-
fixup_roots();
598-
_heap->parallel_cleaning(false);
599-
}
600-
601596
if (!_heap->cancelled_gc()) {
602597
assert(_task_queues->is_empty(), "queues must be empty after traversal GC");
603598
TASKQUEUE_STATS_ONLY(_task_queues->print_taskqueue_stats());
@@ -606,6 +601,9 @@ void ShenandoahTraversalGC::final_traversal_collection() {
606601
// No more marking expected
607602
_heap->mark_complete_marking_context();
608603

604+
fixup_roots();
605+
_heap->parallel_cleaning(false);
606+
609607
// Resize metaspace
610608
MetaspaceGC::compute_new_size();
611609

0 commit comments

Comments
 (0)