8334769: Shenandoah: Move CodeCache_lock close to its use in ShenandoahConcurrentNMethodIterator
Reviewed-by: shade, wkemper, kdnilsen
This commit is contained in:
parent
817edcb697
commit
4ebb77120a
src/hotspot/share/gc/shenandoah
@ -1,4 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2017, 2022, Red Hat, Inc. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
@ -102,12 +103,10 @@ public:
|
||||
WorkerTask("Shenandoah Disarm NMethods"),
|
||||
_iterator(ShenandoahCodeRoots::table()) {
|
||||
assert(SafepointSynchronize::is_at_safepoint(), "Only at a safepoint");
|
||||
MutexLocker mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
|
||||
_iterator.nmethods_do_begin();
|
||||
}
|
||||
|
||||
~ShenandoahDisarmNMethodsTask() {
|
||||
MutexLocker mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
|
||||
_iterator.nmethods_do_end();
|
||||
}
|
||||
|
||||
@ -177,12 +176,10 @@ public:
|
||||
WorkerTask("Shenandoah Unlink NMethods"),
|
||||
_cl(unloading_occurred),
|
||||
_iterator(ShenandoahCodeRoots::table()) {
|
||||
MutexLocker mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
|
||||
_iterator.nmethods_do_begin();
|
||||
}
|
||||
|
||||
~ShenandoahUnlinkTask() {
|
||||
MutexLocker mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
|
||||
_iterator.nmethods_do_end();
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2021, 2022, Red Hat, Inc. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
@ -771,14 +772,12 @@ public:
|
||||
_nmethod_itr(ShenandoahCodeRoots::table()),
|
||||
_phase(phase) {
|
||||
if (ShenandoahHeap::heap()->unload_classes()) {
|
||||
MutexLocker mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
|
||||
_nmethod_itr.nmethods_do_begin();
|
||||
}
|
||||
}
|
||||
|
||||
~ShenandoahConcurrentWeakRootsEvacUpdateTask() {
|
||||
if (ShenandoahHeap::heap()->unload_classes()) {
|
||||
MutexLocker mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
|
||||
_nmethod_itr.nmethods_do_end();
|
||||
}
|
||||
// Notify runtime data structures of potentially dead oops
|
||||
@ -884,14 +883,12 @@ public:
|
||||
_cld_roots(phase, ShenandoahHeap::heap()->workers()->active_workers(), false /*heap iteration*/),
|
||||
_nmethod_itr(ShenandoahCodeRoots::table()) {
|
||||
if (!ShenandoahHeap::heap()->unload_classes()) {
|
||||
MutexLocker mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
|
||||
_nmethod_itr.nmethods_do_begin();
|
||||
}
|
||||
}
|
||||
|
||||
~ShenandoahConcurrentRootsEvacUpdateTask() {
|
||||
if (!ShenandoahHeap::heap()->unload_classes()) {
|
||||
MutexLocker mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
|
||||
_nmethod_itr.nmethods_do_end();
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2019, 2022, Red Hat, Inc. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
@ -478,7 +479,7 @@ ShenandoahConcurrentNMethodIterator::ShenandoahConcurrentNMethodIterator(Shenand
|
||||
}
|
||||
|
||||
void ShenandoahConcurrentNMethodIterator::nmethods_do_begin() {
|
||||
assert(CodeCache_lock->owned_by_self(), "Lock must be held");
|
||||
MutexLocker mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
|
||||
_table_snapshot = _table->snapshot_for_iteration();
|
||||
}
|
||||
|
||||
@ -488,7 +489,7 @@ void ShenandoahConcurrentNMethodIterator::nmethods_do(NMethodClosure* cl) {
|
||||
}
|
||||
|
||||
void ShenandoahConcurrentNMethodIterator::nmethods_do_end() {
|
||||
assert(CodeCache_lock->owned_by_self(), "Lock must be held");
|
||||
MutexLocker mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
|
||||
_table->finish_iteration(_table_snapshot);
|
||||
CodeCache_lock->notify_all();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user