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.87 by jsr166, Tue Jun 9 17:18:05 2015 UTC vs.
Revision 1.88 by dl, Tue Jun 9 23:57:39 2015 UTC

# Line 744 | Line 744 | public class LinkedTransferQueue<E> exte
744      }
745  
746      /**
747 <     * Version of firstOfMode used by Spliterator
747 >     * Version of firstOfMode used by Spliterator. Callers must
748 >     * recheck if the returned node's item field is null or
749 >     * self-linked before using.
750       */
751      final Node firstDataNode() {
752          for (Node p = head; p != null;) {
# Line 1037 | Line 1039 | public class LinkedTransferQueue<E> exte
1039                  Object[] a = new Object[n];
1040                  int i = 0;
1041                  do {
1042 <                    if ((a[i] = p.item) != null)
1042 >                    Object e = p.item;
1043 >                    if (e != p && (a[i] = e) != null)
1044                          ++i;
1045                      if (p == (p = p.next))
1046                          p = q.firstDataNode();
# Line 1065 | Line 1068 | public class LinkedTransferQueue<E> exte
1068                  exhausted = true;
1069                  do {
1070                      Object e = p.item;
1071 +                    if (e != null && e != p)
1072 +                        action.accept((E)e);
1073                      if (p == (p = p.next))
1074                          p = q.firstDataNode();
1070                    if (e != null)
1071                        action.accept((E)e);
1075                  } while (p != null);
1076              }
1077          }
# Line 1082 | Line 1085 | public class LinkedTransferQueue<E> exte
1085                  ((p = current) != null || (p = q.firstDataNode()) != null)) {
1086                  Object e;
1087                  do {
1088 <                    e = p.item;
1088 >                    if ((e = p.item) == p)
1089 >                        e = null;
1090                      if (p == (p = p.next))
1091                          p = q.firstDataNode();
1092                  } while (e == null && p != null);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines