]> Cypherpunks repositories - gostls13.git/commitdiff
os: invoke processKiller synchronously in testKillProcess
authorBryan C. Mills <bcmills@google.com>
Fri, 15 Jan 2021 15:16:25 +0000 (10:16 -0500)
committerBryan C. Mills <bcmills@google.com>
Fri, 15 Jan 2021 18:29:43 +0000 (18:29 +0000)
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>

src/os/os_test.go

index d2e8ed5d8221d293eb729aec708f8cfd866f85aa..698dbca91e4a3ba59a921a8a0d90004b29e85a90 100644 (file)
@@ -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