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>
diff --git a/unix/syscall_unix_test.go b/unix/syscall_unix_test.go
index bc76875..1e7ec2c 100644
--- a/unix/syscall_unix_test.go
+++ b/unix/syscall_unix_test.go
@@ -513,24 +513,37 @@
 }
 
 func TestSelect(t *testing.T) {
-	n, err := unix.Select(0, nil, nil, nil, &unix.Timeval{Sec: 0, Usec: 0})
-	if err != nil {
-		t.Fatalf("Select: %v", err)
-	}
-	if n != 0 {
-		t.Fatalf("Select: got %v ready file descriptors, expected 0", n)
+	for {
+		n, err := unix.Select(0, nil, nil, nil, &unix.Timeval{Sec: 0, Usec: 0})
+		if err == unix.EINTR {
+			t.Logf("Select interrupted")
+			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
 	}
 
 	dur := 250 * time.Millisecond
 	tv := unix.NsecToTimeval(int64(dur))
-	start := time.Now()
-	n, err = unix.Select(0, nil, nil, nil, &tv)
-	took := time.Since(start)
-	if err != nil {
-		t.Fatalf("Select: %v", err)
-	}
-	if n != 0 {
-		t.Fatalf("Select: got %v ready file descriptors, expected 0", n)
+	var took time.Duration
+	for {
+		start := time.Now()
+		n, err := unix.Select(0, nil, nil, nil, &tv)
+		took = time.Since(start)
+		if err == unix.EINTR {
+			t.Logf("Select interrupted after %v", took)
+			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.
@@ -554,12 +567,18 @@
 	fd := int(rr.Fd())
 	rFdSet.Set(fd)
 
-	n, err = unix.Select(fd+1, rFdSet, nil, nil, nil)
-	if err != nil {
-		t.Fatalf("Select: %v", err)
-	}
-	if n != 1 {
-		t.Fatalf("Select: got %v ready file descriptors, expected 1", n)
+	for {
+		n, err := unix.Select(fd+1, rFdSet, nil, nil, nil)
+		if err == unix.EINTR {
+			t.Log("Select interrupted")
+			continue
+		} else if err != nil {
+			t.Fatalf("Select: %v", err)
+		}
+		if n != 1 {
+			t.Fatalf("Select: got %v ready file descriptors, expected 1", n)
+		}
+		break
 	}
 }