Hi, This patch fixes the deadlock in `TestMemorySession#testAcquireCloseRace`. The lock-step spin lock is implemented as with `lock` being an `AtomicInteger`:
// Keep the 2 threads operating on the same scope int k = lock.getAndAdd(1) + 1; while (k != i * 2) { Thread.onSpinWait(); k = lock.get(); } Given the initial condition: Thread 1: i = 0 Thread 2: i = 0 lock: -2 The `lock` then undergoes the following operations: Thread 1 Thread 2 lock value getAndAdd(1) -1 getAndAdd(1) 0 -> Thread 2 then continues its next iteration, its i value is now 1 getAndAdd(1) 1 -> Thread 2 reaches the next iteration before thread 1 has a chance to read the value 0 get() 1 -> Thread 1 now cannot proceed because it missed the value 0 get() 1 -> Thread 2 now cannot proceed because lock can never reach 2 The solution is to not rely on the exact value of the lock but instead whether the lock has passed the expected value. Please take a look, thanks a lot. ------------- Commit messages: - use < instead of != Changes: https://git.openjdk.org/jdk/pull/21976/files Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=21976&range=00 Issue: https://bugs.openjdk.org/browse/JDK-8343793 Stats: 2 lines in 1 file changed: 0 ins; 0 del; 2 mod Patch: https://git.openjdk.org/jdk/pull/21976.diff Fetch: git fetch https://git.openjdk.org/jdk.git pull/21976/head:pull/21976 PR: https://git.openjdk.org/jdk/pull/21976