]> Cypherpunks repositories - gostls13.git/commitdiff
os/exec: avoid leaking an exec.Cmd in TestWaitInterrupt
authorBryan C. Mills <bcmills@google.com>
Tue, 10 Jan 2023 16:29:25 +0000 (11:29 -0500)
committerGopher Robot <gobot@golang.org>
Tue, 10 Jan 2023 17:59:34 +0000 (17:59 +0000)
In CL 436655 I added a GODEBUG setting to this test process to verify
that Wait is eventually called for every exec.Cmd before it becomes
unreachable. However, the cmdHang test helpers in
TestWaitInterrupt/Exit-hang and TestWaitInterrupt/SIGKILL-hang
intentially leak a subprocess in order to simulate a leaky third-party
program, as Go users might encounter in practical use.

To avoid tripping over the leak check, we call Wait on the leaked
subprocess in a background goroutine. Since we expect the process
running cmdHang to exit before its subprocess does, the call to Wait
should have no effect beyond suppressing the leak check.

Fixes #57596.
Updates #52580.
Updates #50436.

Change-Id: Ia4b88ea47fc6b605c27ca6d9d7669c874867a900
Reviewed-on: https://go-review.googlesource.com/c/go/+/460998
Run-TryBot: Bryan Mills <bcmills@google.com>
Auto-Submit: Bryan Mills <bcmills@google.com>
Reviewed-by: Ian Lance Taylor <iant@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>

src/os/exec/exec_test.go

index edff9a201ef2e085a13db4826b78170e242ea8e3..67e2d256b450276317d0dd82bf1c89e20620ed4c 100644 (file)
@@ -1182,6 +1182,7 @@ func cmdHang(args ...string) {
                        os.Exit(1)
                }
                fmt.Fprintf(os.Stderr, "%d: started %d: %v\n", pid, cmd.Process.Pid, cmd)
+               go cmd.Wait() // Release resources if cmd happens not to outlive this process.
        }
 
        if *exitOnInterrupt {