RFR: 8294899: Process.waitFor() throws IllegalThreadStateException when a process on Windows returns an exit code of 259

Roger Riggs rriggs at openjdk.org
Tue Nov 8 15:50:22 UTC 2022


On Fri, 21 Oct 2022 06:04:34 GMT, Jaikiran Pai <jpai at openjdk.org> wrote:

>> Process.waitFor() throws IllegalThreadStateException when a process returns an exit code of 259.
>> As described in the bug report, `waitFor()` should not be sensitive to the exit value.
>> Previously, it erroneously threw IllegalStateException.
>> Added a test to verify.
>
> The reporter of the issue provided additional details that it was their own application/program which was returning that exit value:
> 
>> I encountered it while prototyping an idea involving a Java application spawning a process running a C++ application that returned an exit value indicating the number of items it processed.
> 
> So this appears like the case where this change would help. I haven't found any conclusive/official Windows documentation which forbids user applications from returning this exit value (which represents `STILL_ACTIVE`).

@jaikiran There is advice against exiting with STILL_ACTIVE:
[GetExitCodeProcess](https://learn.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-getexitcodeprocess) says: 

> The GetExitCodeProcess function returns a valid error code defined by the application only after the thread terminates. Therefore, an application should not use STILL_ACTIVE (259) as an error code (STILL_ACTIVE is a macro for STATUS_PENDING (minwinbase.h)). If a thread returns STILL_ACTIVE (259) as an error code, then applications that test for that value could interpret it to mean that the thread is still running, and continue to test for the completion of the thread after the thread has terminated, which could put the application into an infinite loop.

-------------

PR: https://git.openjdk.org/jdk/pull/10680


More information about the core-libs-dev mailing list