RFR: 8289643: File descriptor leak with ProcessBuilder.startPipeline
Roger Riggs
rriggs at openjdk.org
Thu Jul 7 19:17:29 UTC 2022
The `ProcessBuilder.pipelineStart()` implementation does not close all of the file descriptors it uses to create the pipeline of processes.
The process calling `pipelineStart()` is creating the pipes between the stages.
As each process is launched, the file descriptor is inherited by the child process and
the child process `dup`s them to the respective stdin/stdout/stderr fd.
These copies of inherited file descriptors are handled correctly.
Between the launching of each Process, the file descriptor for the read-side of the pipe for the output of the previous process is kept open (in the parent process invoking `pipelineStart`). The file descriptor is correctly passed to the child and is dup'd to the stdin of the next process.
However, the open file descriptor in the parent is not closed after it has been used as the input for the next Process.
The fix is to close the fd after it has been used as the input of the next process.
A new test verifies that after `pipelineStart` is complete, the same file descriptors are open for Unix Pipes as before the test.
The test only runs on Linux using the /proc/<pid>/fd filesystem to identify open file descriptors.
The bug fix is in `ProcessBuilder.pipelineStart` and is applicable to all platforms.
-------------
Commit messages:
- 8289643: File descriptor leak with ProcessBuilder.startPipeline
Changes: https://git.openjdk.org/jdk/pull/9414/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=9414&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8289643
Stats: 144 lines in 2 files changed: 144 ins; 0 del; 0 mod
Patch: https://git.openjdk.org/jdk/pull/9414.diff
Fetch: git fetch https://git.openjdk.org/jdk pull/9414/head:pull/9414
PR: https://git.openjdk.org/jdk/pull/9414
More information about the core-libs-dev
mailing list