diff -r 346a841b2dcc -r 98373487fcf4 jdk/src/share/classes/java/util/concurrent/locks/AbstractQueuedLongSynchronizer.java --- a/jdk/src/share/classes/java/util/concurrent/locks/AbstractQueuedLongSynchronizer.java Tue Feb 24 14:22:08 2009 +0000 +++ b/jdk/src/share/classes/java/util/concurrent/locks/AbstractQueuedLongSynchronizer.java Tue Feb 24 14:01:45 2009 -0800 @@ -1222,8 +1222,10 @@ // The correctness of this depends on head being initialized // before tail and on head.next being accurate if the current // thread is first in queue. - Node h, s; - return (h = head) != tail && + Node t = tail; // Read fields in reverse initialization order + Node h = head; + Node s; + return h != t && ((s = h.next) == null || s.thread != Thread.currentThread()); }