diff options
| author | Ian Lance Taylor <iant@golang.org> | 2021-05-26 15:17:27 -0700 |
|---|---|---|
| committer | Ian Lance Taylor <iant@golang.org> | 2021-05-26 23:33:38 +0000 |
| commit | 3075ffc93e962792ddf43b2a528ef19b1577ffb7 (patch) | |
| tree | 62a7bbf1c6a3903018f677e45178a137cfda24dd /src | |
| parent | a62c08734f8e2fc5333036e3a069a55288d1f674 (diff) | |
| download | go-3075ffc93e962792ddf43b2a528ef19b1577ffb7.tar.xz | |
os: deflake TestFdReadRace
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>
Diffstat (limited to 'src')
| -rw-r--r-- | src/os/pipe_test.go | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/src/os/pipe_test.go b/src/os/pipe_test.go index b663618502..41a1e9c78a 100644 --- a/src/os/pipe_test.go +++ b/src/os/pipe_test.go @@ -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() }() |
