RFR: 8366736: Closed System.out causes child process to hang on Windows [v4]
Ioi Lam
iklam at openjdk.org
Mon Jan 19 20:24:46 UTC 2026
> 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.
Ioi Lam has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains seven additional commits since the last revision:
- fixed typo
- Merge branch 'master' into 8366736-closed-system-out-causes-child-process-to-hang-on-windows
- Review comments from @RogerRiggs
- Reverted previous unintended commit
- 8375654: Exclude all array classes from dynamic CDS archive
- Review comments from @RogerRiggs
- 8366736: Closed System.out causes child process to hang on Windows
-------------
Changes:
- all: https://git.openjdk.org/jdk/pull/29198/files
- new: https://git.openjdk.org/jdk/pull/29198/files/6ef4a4da..7785fde1
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jdk&pr=29198&range=03
- incr: https://webrevs.openjdk.org/?repo=jdk&pr=29198&range=02-03
Stats: 26705 lines in 491 files changed: 14871 ins; 6166 del; 5668 mod
Patch: https://git.openjdk.org/jdk/pull/29198.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/29198/head:pull/29198
PR: https://git.openjdk.org/jdk/pull/29198
More information about the core-libs-dev
mailing list