mirror of
https://github.com/corda/corda.git
synced 2025-01-07 13:38:47 +00:00
interpret time of zero as infinity when isAbsolute is false in Unsafe.park
This behavior is not covered in the documentation, but LockSupport.park clearly relies on it.
This commit is contained in:
parent
01aa1e2bfd
commit
deeb3c694c
@ -2739,12 +2739,15 @@ Avian_sun_misc_Unsafe_park
|
||||
if (time <= 0) {
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
time /= 1000 * 1000;
|
||||
} else if (time) {
|
||||
// if not absolute, interpret time as nanoseconds, but make sure
|
||||
// it doesn't become zero when we convert to milliseconds, since
|
||||
// zero is interpreted as infinity below
|
||||
time = (time / (1000 * 1000)) + 1;
|
||||
}
|
||||
|
||||
monitorAcquire(t, local::interruptLock(t, t->javaThread));
|
||||
while (time > 0
|
||||
while (time >= 0
|
||||
and (not (threadUnparked(t, t->javaThread)
|
||||
or monitorWait
|
||||
(t, local::interruptLock(t, t->javaThread), time))))
|
||||
@ -2752,6 +2755,10 @@ Avian_sun_misc_Unsafe_park
|
||||
int64_t now = t->m->system->now();
|
||||
time -= now - then;
|
||||
then = now;
|
||||
|
||||
if (time == 0) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
threadUnparked(t, t->javaThread) = false;
|
||||
monitorRelease(t, local::interruptLock(t, t->javaThread));
|
||||
|
Loading…
Reference in New Issue
Block a user