Skip to content

Commit 266dea0

Browse files
committed
8256688: Shenandoah: Lock rank inversion after JDK-8212879
Reviewed-by: rkennke
1 parent aeba925 commit 266dea0

File tree

3 files changed

+17
-2
lines changed

3 files changed

+17
-2
lines changed

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1991,9 +1991,13 @@ class ShenandoahConcurrentWeakRootsEvacUpdateTask : public AbstractGangTask {
19911991
MutexLocker mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
19921992
_nmethod_itr.nmethods_do_begin();
19931993
}
1994+
1995+
_dedup_roots.prologue();
19941996
}
19951997

19961998
~ShenandoahConcurrentWeakRootsEvacUpdateTask() {
1999+
_dedup_roots.epilogue();
2000+
19972001
if (_concurrent_class_unloading) {
19982002
MutexLocker mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
19992003
_nmethod_itr.nmethods_do_end();

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,14 +78,17 @@ void ShenandoahStringDedupRoots::oops_do(BoolObjectClosure* is_alive, OopClosure
7878

7979
ShenandoahConcurrentStringDedupRoots::ShenandoahConcurrentStringDedupRoots(ShenandoahPhaseTimings::Phase phase) :
8080
_phase(phase) {
81+
}
82+
83+
void ShenandoahConcurrentStringDedupRoots::prologue() {
8184
if (ShenandoahStringDedup::is_enabled()) {
8285
StringDedupTable_lock->lock_without_safepoint_check();
8386
StringDedupQueue_lock->lock_without_safepoint_check();
8487
StringDedup::gc_prologue(true);
8588
}
8689
}
8790

88-
ShenandoahConcurrentStringDedupRoots::~ShenandoahConcurrentStringDedupRoots() {
91+
void ShenandoahConcurrentStringDedupRoots::epilogue() {
8992
if (ShenandoahStringDedup::is_enabled()) {
9093
StringDedup::gc_epilogue();
9194
StringDedupQueue_lock->unlock();
@@ -223,8 +226,13 @@ ShenandoahHeapIterationRootScanner::ShenandoahHeapIterationRootScanner() :
223226
_weak_roots(ShenandoahPhaseTimings::heap_iteration_roots),
224227
_dedup_roots(ShenandoahPhaseTimings::heap_iteration_roots),
225228
_code_roots(ShenandoahPhaseTimings::heap_iteration_roots) {
229+
_dedup_roots.prologue();
226230
}
227231

232+
ShenandoahHeapIterationRootScanner::~ShenandoahHeapIterationRootScanner() {
233+
_dedup_roots.epilogue();
234+
}
235+
228236
void ShenandoahHeapIterationRootScanner::roots_do(OopClosure* oops) {
229237
assert(Thread::current()->is_VM_thread(), "Only by VM thread");
230238
// Must use _claim_none to avoid interfering with concurrent CLDG iteration

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,9 @@ class ShenandoahConcurrentStringDedupRoots {
9393

9494
public:
9595
ShenandoahConcurrentStringDedupRoots(ShenandoahPhaseTimings::Phase phase);
96-
~ShenandoahConcurrentStringDedupRoots();
96+
97+
void prologue();
98+
void epilogue();
9799

98100
void oops_do(BoolObjectClosure* is_alive, OopClosure* keep_alive, uint worker_id);
99101
};
@@ -191,6 +193,7 @@ class ShenandoahHeapIterationRootScanner : public ShenandoahRootProcessor {
191193

192194
public:
193195
ShenandoahHeapIterationRootScanner();
196+
~ShenandoahHeapIterationRootScanner();
194197

195198
void roots_do(OopClosure* cl);
196199
};

0 commit comments

Comments
 (0)