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.107 by jsr166, Sat Dec 24 11:00:36 2016 UTC vs.
Revision 1.108 by jsr166, Sat Dec 24 16:56:09 2016 UTC

# Line 1179 | Line 1179 | public class LinkedTransferQueue<E> exte
1179      }
1180  
1181      /**
1182     * Main implementation of remove(Object)
1183     */
1184    private boolean findAndRemove(Object e) {
1185        if (e != null) {
1186            for (Node pred = null, p = head; p != null; ) {
1187                Object item = p.item;
1188                if (p.isData) {
1189                    if (item != null && e.equals(item) &&
1190                        p.tryMatchData()) {
1191                        unsplice(pred, p);
1192                        return true;
1193                    }
1194                }
1195                else if (item == null)
1196                    break;
1197                pred = p;
1198                if ((p = p.next) == pred) { // stale
1199                    pred = null;
1200                    p = head;
1201                }
1202            }
1203        }
1204        return false;
1205    }
1206
1207    /**
1182       * Creates an initially empty {@code LinkedTransferQueue}.
1183       */
1184      public LinkedTransferQueue() {
# Line 1472 | Line 1446 | public class LinkedTransferQueue<E> exte
1446       * @return {@code true} if this queue changed as a result of the call
1447       */
1448      public boolean remove(Object o) {
1449 <        return findAndRemove(o);
1449 >        if (o == null)
1450 >            return false;
1451 >        restartFromHead: for (;;) {
1452 >            for (Node pred = null, p = head; p != null; ) {
1453 >                Object item = p.item;
1454 >                if (p.isData) {
1455 >                    if (item != null
1456 >                        && o.equals(item)
1457 >                        && p.tryMatchData()) {
1458 >                        unsplice(pred, p);
1459 >                        return true;
1460 >                    }
1461 >                }
1462 >                else if (item == null)
1463 >                    break;
1464 >                if ((pred = p) == (p = p.next))
1465 >                    continue restartFromHead;
1466 >            }
1467 >            return false;
1468 >        }
1469      }
1470  
1471      /**

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines