提交 be647eb3 编写于 作者: R rriggs

8064932: java/lang/ProcessBuilder/Basic.java: waitFor didn't take long enough

Reviewed-by: dholmes, martin
上级 b4e6ed16
...@@ -405,14 +405,17 @@ final class UNIXProcess extends Process { ...@@ -405,14 +405,17 @@ final class UNIXProcess extends Process {
if (hasExited) return true; if (hasExited) return true;
if (timeout <= 0) return false; if (timeout <= 0) return false;
long timeoutAsNanos = unit.toNanos(timeout); long remainingNanos = unit.toNanos(timeout);
long startTime = System.nanoTime(); long deadline = System.nanoTime() + remainingNanos;
long rem = timeoutAsNanos;
do {
while (!hasExited && (rem > 0)) { // Round up to next millisecond
wait(Math.max(TimeUnit.NANOSECONDS.toMillis(rem), 1)); wait(TimeUnit.NANOSECONDS.toMillis(remainingNanos + 999_999L));
rem = timeoutAsNanos - (System.nanoTime() - startTime); if (hasExited) {
} return true;
}
remainingNanos = deadline - System.nanoTime();
} while (remainingNanos > 0);
return hasExited; return hasExited;
} }
......
...@@ -461,11 +461,21 @@ final class ProcessImpl extends Process { ...@@ -461,11 +461,21 @@ final class ProcessImpl extends Process {
if (getExitCodeProcess(handle) != STILL_ACTIVE) return true; if (getExitCodeProcess(handle) != STILL_ACTIVE) return true;
if (timeout <= 0) return false; if (timeout <= 0) return false;
long msTimeout = unit.toMillis(timeout); long remainingNanos = unit.toNanos(timeout);
long deadline = System.nanoTime() + remainingNanos ;
do {
// Round up to next millisecond
long msTimeout = TimeUnit.NANOSECONDS.toMillis(remainingNanos + 999_999L);
waitForTimeoutInterruptibly(handle, msTimeout);
if (Thread.interrupted())
throw new InterruptedException();
if (getExitCodeProcess(handle) != STILL_ACTIVE) {
return true;
}
remainingNanos = deadline - System.nanoTime();
} while (remainingNanos > 0);
waitForTimeoutInterruptibly(handle, msTimeout);
if (Thread.interrupted())
throw new InterruptedException();
return (getExitCodeProcess(handle) != STILL_ACTIVE); return (getExitCodeProcess(handle) != STILL_ACTIVE);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册