unix: don't fail TestSelect on EINTR from Select

Change-Id: Ie162966c830ffd86947cf4f04532a7f6741a5587
Reviewed-on: https://go-review.googlesource.com/c/sys/+/207861
Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
Tobias Klauser
2019-11-20 15:59:35 +00:00
committed by Tobias Klauser
parent 6bfc516c86
commit 76d669a226
+39 -20
View File
@@ -513,24 +513,37 @@ func TestPoll(t *testing.T) {
} }
func TestSelect(t *testing.T) { func TestSelect(t *testing.T) {
n, err := unix.Select(0, nil, nil, nil, &unix.Timeval{Sec: 0, Usec: 0}) for {
if err != nil { n, err := unix.Select(0, nil, nil, nil, &unix.Timeval{Sec: 0, Usec: 0})
t.Fatalf("Select: %v", err) if err == unix.EINTR {
} t.Logf("Select interrupted")
if n != 0 { continue
t.Fatalf("Select: got %v ready file descriptors, expected 0", n) } else if err != nil {
t.Fatalf("Select: %v", err)
}
if n != 0 {
t.Fatalf("Select: got %v ready file descriptors, expected 0", n)
}
break
} }
dur := 250 * time.Millisecond dur := 250 * time.Millisecond
tv := unix.NsecToTimeval(int64(dur)) tv := unix.NsecToTimeval(int64(dur))
start := time.Now() var took time.Duration
n, err = unix.Select(0, nil, nil, nil, &tv) for {
took := time.Since(start) start := time.Now()
if err != nil { n, err := unix.Select(0, nil, nil, nil, &tv)
t.Fatalf("Select: %v", err) took = time.Since(start)
} if err == unix.EINTR {
if n != 0 { t.Logf("Select interrupted after %v", took)
t.Fatalf("Select: got %v ready file descriptors, expected 0", n) continue
} else if err != nil {
t.Fatalf("Select: %v", err)
}
if n != 0 {
t.Fatalf("Select: got %v ready file descriptors, expected 0", n)
}
break
} }
// On some BSDs the actual timeout might also be slightly less than the requested. // On some BSDs the actual timeout might also be slightly less than the requested.
@@ -554,12 +567,18 @@ func TestSelect(t *testing.T) {
fd := int(rr.Fd()) fd := int(rr.Fd())
rFdSet.Set(fd) rFdSet.Set(fd)
n, err = unix.Select(fd+1, rFdSet, nil, nil, nil) for {
if err != nil { n, err := unix.Select(fd+1, rFdSet, nil, nil, nil)
t.Fatalf("Select: %v", err) if err == unix.EINTR {
} t.Log("Select interrupted")
if n != 1 { continue
t.Fatalf("Select: got %v ready file descriptors, expected 1", n) } else if err != nil {
t.Fatalf("Select: %v", err)
}
if n != 1 {
t.Fatalf("Select: got %v ready file descriptors, expected 1", n)
}
break
} }
} }