< prev index next >

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

Print this page
rev 56315 : 8231244: Shenandoah: all-roots heap walking misses some weak roots
Reviewed-by: XXX

*** 221,237 **** --- 221,242 ---- assert(Thread::current()->is_VM_thread(), "Only by VM thread"); // Must use _claim_none to avoid interfering with concurrent CLDG iteration CLDToOopClosure clds(oops, ClassLoaderData::_claim_none); MarkingCodeBlobClosure code(oops, !CodeBlobToOopClosure::FixRelocations); ShenandoahParallelOopsDoThreadClosure tc_cl(oops, &code, NULL); + AlwaysTrueClosure always_true; ResourceMark rm; _serial_roots.oops_do(oops, 0); _vm_roots.oops_do(oops, 0); _cld_roots.cld_do(&clds, 0); _thread_roots.threads_do(&tc_cl, 0); _code_roots.code_blobs_do(&code, 0); + + _serial_weak_roots.weak_oops_do(oops, 0); + _weak_roots.oops_do<OopClosure>(oops, 0); + _dedup_roots.oops_do(&always_true, oops, 0); } void ShenandoahHeapIterationRootScanner::strong_roots_do(OopClosure* oops) { assert(Thread::current()->is_VM_thread(), "Only by VM thread"); // Must use _claim_none to avoid interfering with concurrent CLDG iteration
< prev index next >