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

Comparing jsr166/src/main/java/util/concurrent/LinkedTransferQueue.java (file contents):
Revision 1.138 by jsr166, Sun Jan 8 03:48:36 2017 UTC vs.
Revision 1.139 by jsr166, Mon Jan 9 17:46:26 2017 UTC

# Line 761 | Line 761 | public class LinkedTransferQueue<E> exte
761       * before using.
762       */
763      final Node firstDataNode() {
764 +        Node first = null;
765          restartFromHead: for (;;) {
766 <            for (Node p = head; p != null;) {
767 <                Object item = p.item;
768 <                if (p.isData) {
769 <                    if (item != null)
770 <                        return p;
766 >            Node h = head, p = h;
767 >            for (; p != null;) {
768 >                final Object item;
769 >                if ((item = p.item) != null) {
770 >                    if (p.isData) {
771 >                        first = p;
772 >                        break;
773 >                    }
774                  }
775 <                else if (item == null)
775 >                else if (!p.isData)
776                      break;
777 <                if (p == (p = p.next))
777 >                final Node q;
778 >                if ((q = p.next) == null)
779 >                    break;
780 >                if (p == (p = q))
781                      continue restartFromHead;
782              }
783 <            return null;
783 >            if (p != h && casHead(h, p))
784 >                h.forgetNext();
785 >            return first;
786          }
787      }
788  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines