On Tue, 13 Jan 2026 16:52:36 GMT, Ioi Lam <[email protected]> wrote: > The bug is here on line 121: > > https://github.com/openjdk/jdk/blob/586846b84a38d285c5905437e903cfc57f609410/src/java.base/windows/classes/java/lang/ProcessImpl.java#L118-L121 > > If `System.out` has been closed, `fdAccess.getHandle()` will return -1. This > causes `stdHandles[1]` to have the same value as if the child process's > stdout was redirected with `Redirect.PIPE`. This will cause a Pipe to be > created here for the child process's STDOUT on line 168: > > https://github.com/openjdk/jdk/blob/586846b84a38d285c5905437e903cfc57f609410/src/java.base/windows/native/libjava/ProcessImpl_md.c#L158-L184 > > However, the caller of the `ProcessBuilder` is not aware of this and will not > drain this pipe. This causes the child process to get stuck when writing to > its stdout when the pipe 's buffer is filled up. > > The fix is to treat the redirection as `Redirect.DISCARD` when `System.out` > and/or `System.err` have been closed.
This pull request has now been integrated. Changeset: c3b67387 Author: Ioi Lam <[email protected]> URL: https://git.openjdk.org/jdk/commit/c3b67387c4c0891891c75f9001ba13feaae09017 Stats: 91 lines in 3 files changed: 89 ins; 0 del; 2 mod 8366736: Closed System.out causes child process to hang on Windows Reviewed-by: rriggs ------------- PR: https://git.openjdk.org/jdk/pull/29198
