aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorIan Lance Taylor <iant@golang.org>2021-05-26 15:17:27 -0700
committerIan Lance Taylor <iant@golang.org>2021-05-26 23:33:38 +0000
commit3075ffc93e962792ddf43b2a528ef19b1577ffb7 (patch)
tree62a7bbf1c6a3903018f677e45178a137cfda24dd /src
parenta62c08734f8e2fc5333036e3a069a55288d1f674 (diff)
downloadgo-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.go11
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()
}()