From c06b10ae9df81ea3ffdfe118a92410da4e153fea Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Mon, 12 Dec 2016 16:53:12 -0800 Subject: [PATCH] os/exec: fix race in TestStdinCloseRace 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 --- src/os/exec/exec_test.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/os/exec/exec_test.go b/src/os/exec/exec_test.go index 4052e71042..34337450a0 100644 --- a/src/os/exec/exec_test.go +++ b/src/os/exec/exec_test.go @@ -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) } -- 2.48.1