> 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

Reply via email to