From 2f86c98f3482ca877df5933731c2cdd38007a776 Mon Sep 17 00:00:00 2001 From: Tobias Klauser Date: Sat, 16 Nov 2019 13:15:17 +0100 Subject: [PATCH] unix: don't fail TestPselect on EINTR from Pselect Updates golang/go#35555 Change-Id: I3efb010c8edf92a75941c6b7ec749665235020d8 Reviewed-on: https://go-review.googlesource.com/c/sys/+/207284 Run-TryBot: Tobias Klauser TryBot-Result: Gobot Gobot Reviewed-by: Brad Fitzpatrick --- unix/syscall_linux_test.go | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/unix/syscall_linux_test.go b/unix/syscall_linux_test.go index 0ffe0f3e..99a0f654 100644 --- a/unix/syscall_linux_test.go +++ b/unix/syscall_linux_test.go @@ -287,20 +287,31 @@ func TestSelect(t *testing.T) { } func TestPselect(t *testing.T) { - _, err := unix.Pselect(0, nil, nil, nil, &unix.Timespec{Sec: 0, Nsec: 0}, nil) - if err != nil { - t.Fatalf("Pselect: %v", err) + for { + _, err := unix.Pselect(0, nil, nil, nil, &unix.Timespec{Sec: 0, Nsec: 0}, nil) + if err != nil { + t.Fatalf("Pselect: %v", err) + } else if err == unix.EINTR { + t.Logf("Pselect interrupted") + continue + } + break } dur := 2500 * time.Microsecond ts := unix.NsecToTimespec(int64(dur)) - start := time.Now() - _, err = unix.Pselect(0, nil, nil, nil, &ts, nil) - took := time.Since(start) - if err == unix.EINTR { - t.Skipf("Pselect interrupted after %v timeout", took) - } else if err != nil { - t.Fatalf("Pselect: %v", err) + var took time.Duration + for { + start := time.Now() + _, err := unix.Pselect(0, nil, nil, nil, &ts, nil) + took = time.Since(start) + if err == unix.EINTR { + t.Logf("Pselect interrupted after %v", took) + continue + } else if err != nil { + t.Fatalf("Pselect: %v", err) + } + break } if took < dur {