]> Cypherpunks repositories - gostls13.git/commitdiff
os/exec: fix race in TestStdinCloseRace
authorIan Lance Taylor <iant@golang.org>
Tue, 13 Dec 2016 00:53:12 +0000 (16:53 -0800)
committerIan Lance Taylor <iant@golang.org>
Tue, 13 Dec 2016 01:56:36 +0000 (01:56 +0000)
The test for the race detector itself had a race of a sort not
detected by the race detector.

Fixes #18286.

Change-Id: I3265eae275aaa2869a6b6d3e8675b0d88b25831b
Reviewed-on: https://go-review.googlesource.com/34287
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/os/exec/exec_test.go

index 4052e7104257e385fa9b6e5aaec64ae8061c0489..34337450a08c7d78b9efe9faae81ef1087bf73ee 100644 (file)
@@ -247,6 +247,11 @@ func TestStdinClose(t *testing.T) {
 }
 
 // Issue 17647.
+// It used to be the case that TestStdinClose, above, would fail when
+// run under the race detector. This test is a variant of TestStdinClose
+// that also used to fail when run under the race detector.
+// This test is run by cmd/dist under the race detector to verify that
+// the race detector no longer reports any problems.
 func TestStdinCloseRace(t *testing.T) {
        cmd := helperCommand(t, "stdinClose")
        stdin, err := cmd.StdinPipe()
@@ -262,7 +267,12 @@ func TestStdinCloseRace(t *testing.T) {
                }
        }()
        go func() {
-               io.Copy(stdin, strings.NewReader(stdinCloseTestString))
+               // Send the wrong string, so that the child fails even
+               // if the other goroutine doesn't manage to kill it first.
+               // This test is to check that the race detector does not
+               // falsely report an error, so it doesn't matter how the
+               // child process fails.
+               io.Copy(stdin, strings.NewReader("unexpected string"))
                if err := stdin.Close(); err != nil {
                        t.Errorf("stdin.Close: %v", err)
                }