From 22d9ce4b6d32a615a35f8f451ed7e5436ebc922a Mon Sep 17 00:00:00 2001 From: Viktor Klang Date: Wed, 10 Jun 2026 12:21:35 +0200 Subject: [PATCH] Addressing the same live-lock issue found in AQS in AQLS and StampedLock --- .../util/concurrent/locks/AbstractQueuedLongSynchronizer.java | 3 ++- .../share/classes/java/util/concurrent/locks/StampedLock.java | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/java.base/share/classes/java/util/concurrent/locks/AbstractQueuedLongSynchronizer.java b/src/java.base/share/classes/java/util/concurrent/locks/AbstractQueuedLongSynchronizer.java index ba81123fc35..2711f047d4f 100644 --- a/src/java.base/share/classes/java/util/concurrent/locks/AbstractQueuedLongSynchronizer.java +++ b/src/java.base/share/classes/java/util/concurrent/locks/AbstractQueuedLongSynchronizer.java @@ -452,7 +452,8 @@ public abstract class AbstractQueuedLongSynchronizer if (q.status < 0) { // cancelled if ((s == null ? casTail(q, p) : s.casPrev(q, p)) && q.prev == p) { - p.casNext(q, s); // OK if fails + if (s != null) + p.casNext(q, s); // OK if fails if (p.prev == null) signalNext(p); } diff --git a/src/java.base/share/classes/java/util/concurrent/locks/StampedLock.java b/src/java.base/share/classes/java/util/concurrent/locks/StampedLock.java index 3fbfad875d6..3dfd4793cd4 100644 --- a/src/java.base/share/classes/java/util/concurrent/locks/StampedLock.java +++ b/src/java.base/share/classes/java/util/concurrent/locks/StampedLock.java @@ -1450,7 +1450,8 @@ public class StampedLock implements java.io.Serializable { if (q.status < 0) { // cancelled if ((s == null ? casTail(q, p) : s.casPrev(q, p)) && q.prev == p) { - p.casNext(q, s); // OK if fails + if (s != null) + p.casNext(q, s); // OK if fails if (p.prev == null) signalNext(p); }