]> Cypherpunks repositories - gostls13.git/commitdiff
os: deflake TestFdReadRace
authorIan Lance Taylor <iant@golang.org>
Wed, 26 May 2021 22:17:27 +0000 (15:17 -0700)
committerIan Lance Taylor <iant@golang.org>
Wed, 26 May 2021 23:33:38 +0000 (23:33 +0000)
The test would hang if the call to Fd set the pipe to be non-blocking
before the Read entered the first read system call. Avoid that problem
by writing data to the pipe to wake up the read.

For #24481
Fixes #44818

Change-Id: I0b798874c7b81e7308a38ebbf657efc4392ffacd
Reviewed-on: https://go-review.googlesource.com/c/go/+/322893
Trust: Ian Lance Taylor <iant@golang.org>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Damien Neil <dneil@google.com>
src/os/pipe_test.go

index b6636185029c5f24a3353c41976843fdd6c110c4..41a1e9c78aa36542a892392b63ae136cfd3403be 100644 (file)
@@ -442,12 +442,14 @@ func TestFdReadRace(t *testing.T) {
        defer r.Close()
        defer w.Close()
 
-       c := make(chan bool)
+       const count = 10
+
+       c := make(chan bool, 1)
        var wg sync.WaitGroup
        wg.Add(1)
        go func() {
                defer wg.Done()
-               var buf [10]byte
+               var buf [count]byte
                r.SetReadDeadline(time.Now().Add(time.Minute))
                c <- true
                if _, err := r.Read(buf[:]); os.IsTimeout(err) {
@@ -466,8 +468,9 @@ func TestFdReadRace(t *testing.T) {
                r.Fd()
 
                // The bug was that Fd would hang until Read timed out.
-               // If the bug is fixed, then closing r here will cause
-               // the Read to exit before the timeout expires.
+               // If the bug is fixed, then writing to w and closing r here
+               // will cause the Read to exit before the timeout expires.
+               w.Write(make([]byte, count))
                r.Close()
        }()