568 |
|
throw new NullPointerException(); |
569 |
|
Node s = null; // the node to append, if needed |
570 |
|
|
571 |
< |
retry: |
572 |
< |
for (;;) { // restart on append race |
573 |
< |
|
571 |
> |
restartFromHead: for (;;) { |
572 |
|
for (Node h = head, p = h; p != null;) { // find & match first node |
573 |
|
boolean isData = p.isData; |
574 |
|
Object item = p.item; |
600 |
|
s = new Node(e); |
601 |
|
Node pred = tryAppend(s, haveData); |
602 |
|
if (pred == null) |
603 |
< |
continue retry; // lost race vs opposite mode |
603 |
> |
continue restartFromHead; // lost race vs opposite mode |
604 |
|
if (how != ASYNC) |
605 |
|
return awaitMatch(s, pred, e, (how == TIMED), nanos); |
606 |
|
} |