940 |
|
UNSAFE.putOrderedObject(this, currentJoinOffset, joinMe); |
941 |
|
if (isTerminating()) // cancel if shutting down |
942 |
|
joinMe.cancelIgnoringExceptions(); |
943 |
< |
else { |
944 |
< |
if (sp != base) |
945 |
< |
localHelpJoinTask(joinMe); |
946 |
< |
if (joinMe.status >= 0) |
947 |
< |
pool.awaitJoin(joinMe, this, timed, nanos); |
948 |
< |
} |
943 |
> |
else |
944 |
> |
pool.awaitJoin(joinMe, this, timed, nanos); |
945 |
|
UNSAFE.putOrderedObject(this, currentJoinOffset, prevJoin); |
946 |
|
} |
947 |
|
|
948 |
|
/** |
949 |
|
* Run tasks in local queue until given task is done. |
950 |
+ |
* Not currently used because it complicates semantics. |
951 |
|
* |
952 |
|
* @param joinMe the task to join |
953 |
|
*/ |
1012 |
|
for (int j = 0; ; ++j) { // search array |
1013 |
|
if (j < n) { |
1014 |
|
ForkJoinTask<?> vs; |
1015 |
< |
if ((v = ws[j]) != null && |
1015 |
> |
if ((v = ws[j]) != null && v != this && |
1016 |
|
(vs = v.currentSteal) != null) { |
1017 |
|
if (joinMe.status < 0 || task.status < 0) |
1018 |
|
return; // stale or done |