231 |
|
/** Returns true if successfully pushed c onto stack. */ |
232 |
|
final boolean tryPushStack(Completion c) { |
233 |
|
Completion h = stack; |
234 |
< |
NEXT.setRelease(c, h); |
234 |
> |
NEXT.set(c, h); // CAS piggyback |
235 |
|
return STACK.compareAndSet(this, h, c); |
236 |
|
} |
237 |
|
|
531 |
|
if (c != null) { |
532 |
|
while (!tryPushStack(c)) { |
533 |
|
if (result != null) { |
534 |
< |
NEXT.setRelease(c, null); |
534 |
> |
NEXT.set(c, null); |
535 |
|
break; |
536 |
|
} |
537 |
|
} |
1095 |
|
if (c != null) { |
1096 |
|
Object r; |
1097 |
|
while ((r = result) == null && !tryPushStack(c)) |
1098 |
< |
NEXT.setRelease(c, null); // clear on failure |
1098 |
> |
NEXT.set(c, null); // clear on failure |
1099 |
|
if (b != null && b != this && b.result == null) { |
1100 |
|
Completion q = (r != null) ? c : new CoCompletion(c); |
1101 |
|
while (b.result == null && !b.tryPushStack(q)) |
1102 |
< |
NEXT.setRelease(q, null); // clear on failure |
1102 |
> |
NEXT.set(q, null); // clear on failure |
1103 |
|
} |
1104 |
|
} |
1105 |
|
} |
1414 |
|
Completion q = new CoCompletion(c); |
1415 |
|
while (result == null && b.result == null && |
1416 |
|
!b.tryPushStack(q)) |
1417 |
< |
NEXT.setRelease(q, null); // clear on failure |
1417 |
> |
NEXT.set(q, null); // clear on failure |
1418 |
|
} |
1419 |
|
break; |
1420 |
|
} |
1421 |
< |
NEXT.setRelease(c, null); // clear on failure |
1421 |
> |
NEXT.set(c, null); // clear on failure |
1422 |
|
} |
1423 |
|
} |
1424 |
|
} |