Integrated: 8366736: Closed System.out causes child process to hang on Windows
Ioi Lam
iklam at openjdk.org
Mon Feb 16 20:27:47 UTC 2026
On Tue, 13 Jan 2026 16:52:36 GMT, Ioi Lam <iklam at openjdk.org> 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 <iklam at openjdk.org>
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
More information about the core-libs-dev
mailing list