--- jsr166/src/jsr166y/LinkedTransferQueue.java 2009/11/15 02:29:12 1.70 +++ jsr166/src/jsr166y/LinkedTransferQueue.java 2009/11/16 01:02:49 1.71 @@ -879,14 +879,15 @@ public class LinkedTransferQueue exte * Unlinks matched nodes encountered in a traversal from head. */ private void sweep() { - Node p = head, s, n; - while (p != null && (s = p.next) != null && (n = s.next) != null) { - if (p == s || s == n) - p = head; // stale - else if (s.isMatched()) - p.casNext(s, n); - else + for (Node p = head, s, n; p != null && (s = p.next) != null; ) { + if (p == s) // stale + p = head; + else if (!s.isMatched()) p = s; + else if ((n = s.next) == null) // trailing node is pinned + break; + else + p.casNext(s, n); } }