ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/jsr166y/LinkedTransferQueue.java
(Generate patch)

Comparing jsr166/src/jsr166y/LinkedTransferQueue.java (file contents):
Revision 1.76 by jsr166, Wed Sep 1 22:49:09 2010 UTC vs.
Revision 1.79 by dl, Fri Sep 10 10:43:23 2010 UTC

# Line 877 | Line 877 | public class LinkedTransferQueue<E> exte
877      }
878  
879      /**
880 <     * Unlinks matched nodes encountered in a traversal from head.
880 >     * Unlinks matched (typically cancelled) nodes encountered in a
881 >     * traversal from head.
882       */
883      private void sweep() {
884          for (Node p = head, s, n; p != null && (s = p.next) != null; ) {
885 <            if (p == s)                    // stale
886 <                p = head;
886 <            else if (!s.isMatched())
885 >            if (!s.isMatched())
886 >                // Unmatched nodes are never self-linked
887                  p = s;
888              else if ((n = s.next) == null) // trailing node is pinned
889                  break;
890 +            else if (s == n)    // stale
891 +                // No need to also check for p == s, since that implies s == n
892 +                p = head;
893              else
894                  p.casNext(s, n);
895          }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines