Loading... (original) (raw)
A DESCRIPTION OF THE PROBLEM :
Please consider this code snippet:
```
public class Temp {
public static void main(String[] args) throws IOException, InterruptedException {
java.lang.Process unixProcess = new ProcessBuilder("ls").directory(new File(".")).start();
unixProcess.waitFor(Long.MAX_VALUE, TimeUnit.MILLISECONDS);
}
}
```
it should work, but it dies with "IllegalArgumentException: timeout value is negative" exception.
Looking at `java.lang.UNIXProcess#waitFor(long timeout, TimeUnit unit)` method:
long remainingNanos = unit.toNanos(timeout); //reporter: this returns Long.MAX_VALUE
long deadline = System.nanoTime() + remainingNanos;
```
...
do {
// Round up to next millisecond
wait(TimeUnit.NANOSECONDS.toMillis(remainingNanos + 999_999L)); //reporter: remainingNanos + 999_999L evaluates to negative value, because remainingNanos == Long.MAX_VALUE
...
```
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
public class Temp {
public static void main(String[] args) throws IOException, InterruptedException {
java.lang.Process unixProcess = new ProcessBuilder("ls").directory(new File(".")).start();
unixProcess.waitFor(Long.MAX_VALUE, TimeUnit.MILLISECONDS);
}
}
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Successful execution
ACTUAL -
Exception in thread "main" java.lang.IllegalArgumentException: timeout value is negative
at java.lang.Object.wait(Native Method)
at java.lang.UNIXProcess.waitFor(UNIXProcess.java:412)
---------- BEGIN SOURCE ----------
public class Temp {
public static void main(String[] args) throws IOException, InterruptedException {
java.lang.Process unixProcess = new ProcessBuilder("ls").directory(new File(".")).start();
unixProcess.waitFor(Long.MAX_VALUE, TimeUnit.MILLISECONDS);
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
Specify smaller timeout