From 3cf1e67d0c949e8e6da575b9a2ff8b09ac17d9c1 Mon Sep 17 00:00:00 2001 From: Tobias Klauser Date: Wed, 13 Nov 2024 10:35:57 +0100 Subject: [PATCH] unix: don't fail TestPpoll on EINTR TestPpoll sometimes fails builders due to Ppoll getting interrupted and returning EINTR: --- FAIL: TestPpoll (0.00s) syscall_linux_test.go:299: Ppoll: unexpected error: interrupted system call Fix this by retrying Ppoll in case of EINTR, same as CL 298189 in TestPoll. Fixes golang/go#66324 Change-Id: I8ce4e2c00fe3b7a078cd75b4b15bb076d3a87fb2 Reviewed-on: https://go-review.googlesource.com/c/sys/+/627395 Reviewed-by: Cherry Mui Reviewed-by: Ian Lance Taylor Auto-Submit: Tobias Klauser LUCI-TryBot-Result: Go LUCI --- unix/syscall_linux_test.go | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/unix/syscall_linux_test.go b/unix/syscall_linux_test.go index eca3b7aad..d4ed88726 100644 --- a/unix/syscall_linux_test.go +++ b/unix/syscall_linux_test.go @@ -337,15 +337,21 @@ func TestPpoll(t *testing.T) { fds := []unix.PollFd{{Fd: int32(f.Fd()), Events: unix.POLLIN}} timeoutTs := unix.NsecToTimespec(int64(timeout)) - n, err := unix.Ppoll(fds, &timeoutTs, nil) - ok <- true - if err != nil { - t.Errorf("Ppoll: unexpected error: %v", err) - return - } - if n != 0 { - t.Errorf("Ppoll: wrong number of events: got %v, expected %v", n, 0) - return + for { + n, err := unix.Ppoll(fds, &timeoutTs, nil) + ok <- true + if err == unix.EINTR { + t.Log("Ppoll interrupted") + continue + } else if err != nil { + t.Errorf("Ppoll: unexpected error: %v", err) + return + } + if n != 0 { + t.Errorf("Ppoll: wrong number of events: got %v, expected %v", n, 0) + return + } + break } }