496 |
|
*/ |
497 |
|
private volatile long eventWaiters; |
498 |
|
|
499 |
< |
private static final int EVENT_COUNT_SHIFT = 32; |
500 |
< |
private static final long WAITER_ID_MASK = (1L << 16) - 1L; |
499 |
> |
private static final int EVENT_COUNT_SHIFT = 32; |
500 |
> |
private static final int WAITER_ID_MASK = (1 << 16) - 1; |
501 |
|
|
502 |
|
/** |
503 |
|
* A counter for events that may wake up worker threads: |
737 |
|
int ec = eventCount; |
738 |
|
boolean releasedOne = false; |
739 |
|
ForkJoinWorkerThread w; int id; |
740 |
< |
while ((id = ((int)(h & WAITER_ID_MASK)) - 1) >= 0 && |
740 |
> |
while ((id = (((int)h) & WAITER_ID_MASK) - 1) >= 0 && |
741 |
|
(int)(h >>> EVENT_COUNT_SHIFT) != ec && |
742 |
|
id < n && (w = ws[id]) != null) { |
743 |
|
if (UNSAFE.compareAndSwapLong(this, eventWaitersOffset, |
775 |
|
long nh = (((long)ec) << EVENT_COUNT_SHIFT) | ((long)(w.poolIndex+1)); |
776 |
|
long h; |
777 |
|
while ((runState < SHUTDOWN || !tryTerminate(false)) && |
778 |
< |
(((int)((h = eventWaiters) & WAITER_ID_MASK)) == 0 || |
778 |
> |
(((int)(h = eventWaiters) & WAITER_ID_MASK) == 0 || |
779 |
|
(int)(h >>> EVENT_COUNT_SHIFT) == ec) && |
780 |
|
eventCount == ec) { |
781 |
|
if (UNSAFE.compareAndSwapLong(this, eventWaitersOffset, |
934 |
|
} |
935 |
|
else if ((h = eventWaiters) != 0L) { |
936 |
|
long nh; |
937 |
< |
int id = ((int)(h & WAITER_ID_MASK)) - 1; |
937 |
> |
int id = (((int)h) & WAITER_ID_MASK) - 1; |
938 |
|
if (id >= 0 && id < n && (w = ws[id]) != null && |
939 |
|
(nh = w.nextWaiter) != 0L && // keep at least one worker |
940 |
|
UNSAFE.compareAndSwapLong(this, eventWaitersOffset, h, nh)) |