aboutsummaryrefslogtreecommitdiff
path: root/src/os
diff options
context:
space:
mode:
authorBryan C. Mills <bcmills@google.com>2021-01-15 10:16:25 -0500
committerBryan C. Mills <bcmills@google.com>2021-01-15 18:29:43 +0000
commit1deae0b59747ea87d0ef02b6dfdfbbdf5e7bcee8 (patch)
tree87fd575cd04bf0176fd06ae8a186acfcaa9a1ba5 /src/os
parentff196c3e84b7e8d47285a0833d0458db3286f8ec (diff)
downloadgo-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.go16
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