diff options
author | Bryan C. Mills <bcmills@google.com> | 2021-01-15 10:16:25 -0500 |
---|---|---|
committer | Bryan C. Mills <bcmills@google.com> | 2021-01-15 18:29:43 +0000 |
commit | 1deae0b59747ea87d0ef02b6dfdfbbdf5e7bcee8 (patch) | |
tree | 87fd575cd04bf0176fd06ae8a186acfcaa9a1ba5 /src/os | |
parent | ff196c3e84b7e8d47285a0833d0458db3286f8ec (diff) | |
download | go-1deae0b59747ea87d0ef02b6dfdfbbdf5e7bcee8.tar.gz go-1deae0b59747ea87d0ef02b6dfdfbbdf5e7bcee8.zip |
os: invoke processKiller synchronously in testKillProcess
Previously, testKillProcess needlessly invoked processKiller in a
separate goroutine and failed to wait for that goroutine to complete,
causing the calls to t.Fatalf in that goroutine to potentially occur
after the test function had already returned.
Fixes #43722
Change-Id: I5d03cb24af51bb73f0ff96419dac57ec39776967
Reviewed-on: https://go-review.googlesource.com/c/go/+/284153
Trust: Bryan C. Mills <bcmills@google.com>
Trust: Jason A. Donenfeld <Jason@zx2c4.com>
Reviewed-by: Jason A. Donenfeld <Jason@zx2c4.com>
Run-TryBot: Jason A. Donenfeld <Jason@zx2c4.com>
TryBot-Result: Go Bot <gobot@golang.org>
Diffstat (limited to 'src/os')
-rw-r--r-- | src/os/os_test.go | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/src/os/os_test.go b/src/os/os_test.go index d2e8ed5d82..698dbca91e 100644 --- a/src/os/os_test.go +++ b/src/os/os_test.go @@ -2298,6 +2298,7 @@ func TestLongPath(t *testing.T) { func testKillProcess(t *testing.T, processKiller func(p *Process)) { testenv.MustHaveExec(t) + t.Parallel() // Re-exec the test binary itself to emulate "sleep 1". cmd := osexec.Command(Args[0], "-test.run", "TestSleep") @@ -2305,14 +2306,15 @@ func testKillProcess(t *testing.T, processKiller func(p *Process)) { if err != nil { t.Fatalf("Failed to start test process: %v", err) } - go func() { - time.Sleep(100 * time.Millisecond) - processKiller(cmd.Process) + + defer func() { + if err := cmd.Wait(); err == nil { + t.Errorf("Test process succeeded, but expected to fail") + } }() - err = cmd.Wait() - if err == nil { - t.Errorf("Test process succeeded, but expected to fail") - } + + time.Sleep(100 * time.Millisecond) + processKiller(cmd.Process) } // TestSleep emulates "sleep 1". It is a helper for testKillProcess, so we |