diff --git a/src/hotspot/share/gc/shenandoah/shenandoahLock.cpp b/src/hotspot/share/gc/shenandoah/shenandoahLock.cpp index 39588d68bc8..349f5415cdc 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahLock.cpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahLock.cpp @@ -54,7 +54,8 @@ template void ShenandoahLock::contended_lock_internal(JavaThread* java_thread) { int ctr = 0; int yields = 0; - while (Atomic::cmpxchg(&_state, unlocked, locked) != unlocked) { + while (Atomic::load(&_state) == locked || + Atomic::cmpxchg(&_state, unlocked, locked) != unlocked) { if ((++ctr & 0xFFF) == 0) { BlockOp block(java_thread); if (yields > 5) {