# HG changeset patch # User zgu # Date 1590713595 14400 # Thu May 28 20:53:15 2020 -0400 # Node ID b92856348208ab99cdd938596d1d1d7be0a4c192 # Parent 02a5a446f8bf0470b2dae1b4c1fb2aa3c9f4698a 8245880: Shenandoah: check class unloading flag early in concurrent code root scan diff --git a/src/hotspot/share/gc/shenandoah/shenandoahConcurrentMark.cpp b/src/hotspot/share/gc/shenandoah/shenandoahConcurrentMark.cpp --- a/src/hotspot/share/gc/shenandoah/shenandoahConcurrentMark.cpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahConcurrentMark.cpp @@ -390,21 +390,23 @@ } void ShenandoahConcurrentMark::concurrent_scan_code_roots(uint worker_id, ReferenceProcessor* rp) { + if (_heap->unload_classes()) { + return; + } + if (claim_codecache()) { ShenandoahObjToScanQueue* q = task_queues()->queue(worker_id); - if (!_heap->unload_classes()) { - MutexLocker mu(CodeCache_lock, Mutex::_no_safepoint_check_flag); - // TODO: We can not honor StringDeduplication here, due to lock ranking - // inversion. So, we may miss some deduplication candidates. - if (_heap->has_forwarded_objects()) { - ShenandoahMarkResolveRefsClosure cl(q, rp); - CodeBlobToOopClosure blobs(&cl, !CodeBlobToOopClosure::FixRelocations); - CodeCache::blobs_do(&blobs); - } else { - ShenandoahMarkRefsClosure cl(q, rp); - CodeBlobToOopClosure blobs(&cl, !CodeBlobToOopClosure::FixRelocations); - CodeCache::blobs_do(&blobs); - } + MutexLocker mu(CodeCache_lock, Mutex::_no_safepoint_check_flag); + // TODO: We can not honor StringDeduplication here, due to lock ranking + // inversion. So, we may miss some deduplication candidates. + if (_heap->has_forwarded_objects()) { + ShenandoahMarkResolveRefsClosure cl(q, rp); + CodeBlobToOopClosure blobs(&cl, !CodeBlobToOopClosure::FixRelocations); + CodeCache::blobs_do(&blobs); + } else { + ShenandoahMarkRefsClosure cl(q, rp); + CodeBlobToOopClosure blobs(&cl, !CodeBlobToOopClosure::FixRelocations); + CodeCache::blobs_do(&blobs); } } }