From 5e42df96c65bca313fa6b9825fbcc36a2534332c Mon Sep 17 00:00:00 2001 From: wangzhuowei Date: Wed, 2 Aug 2023 13:17:27 +0800 Subject: [PATCH] fix: epoll tests --- poll_default_linux_test.go | 39 +++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/poll_default_linux_test.go b/poll_default_linux_test.go index acd0afc9..a8e935d1 100644 --- a/poll_default_linux_test.go +++ b/poll_default_linux_test.go @@ -62,7 +62,7 @@ func TestEpollEvent(t *testing.T) { MustNil(t, err) _, err = syscall.Write(wfd, send) MustNil(t, err) - n, err := EpollWait(epollfd, events, -1) + n, err := epollWaitUntil(epollfd, events, -1) MustNil(t, err) Equal(t, n, 1) Equal(t, events[0].data, eventdata2) @@ -80,7 +80,7 @@ func TestEpollEvent(t *testing.T) { MustNil(t, err) _, err = syscall.Write(wfd, send) MustNil(t, err) - n, err = EpollWait(epollfd, events, -1) + n, err = epollWaitUntil(epollfd, events, -1) MustNil(t, err) Equal(t, events[0].data, eventdata3) _, err = syscall.Read(rfd, recv) @@ -112,7 +112,7 @@ func TestEpollWait(t *testing.T) { } err = EpollCtl(epollfd, unix.EPOLL_CTL_ADD, rfd, event) MustNil(t, err) - _, err = EpollWait(epollfd, events, -1) + _, err = epollWaitUntil(epollfd, events, -1) MustNil(t, err) Assert(t, events[0].events&syscall.EPOLLIN == 0) Assert(t, events[0].events&syscall.EPOLLOUT != 0) @@ -120,7 +120,7 @@ func TestEpollWait(t *testing.T) { // EPOLL: readable _, err = syscall.Write(wfd, send) MustNil(t, err) - _, err = EpollWait(epollfd, events, -1) + _, err = epollWaitUntil(epollfd, events, -1) MustNil(t, err) Assert(t, events[0].events&syscall.EPOLLIN != 0) Assert(t, events[0].events&syscall.EPOLLOUT != 0) @@ -128,7 +128,7 @@ func TestEpollWait(t *testing.T) { MustTrue(t, err == nil && string(recv) == string(send)) // EPOLL: read finished - _, err = EpollWait(epollfd, events, -1) + _, err = epollWaitUntil(epollfd, events, -1) MustNil(t, err) Assert(t, events[0].events&syscall.EPOLLIN == 0) Assert(t, events[0].events&syscall.EPOLLOUT != 0) @@ -136,7 +136,7 @@ func TestEpollWait(t *testing.T) { // EPOLL: close peer fd err = syscall.Close(wfd) MustNil(t, err) - _, err = EpollWait(epollfd, events, -1) + _, err = epollWaitUntil(epollfd, events, -1) MustNil(t, err) Assert(t, events[0].events&syscall.EPOLLIN != 0) Assert(t, events[0].events&syscall.EPOLLOUT != 0) @@ -149,7 +149,7 @@ func TestEpollWait(t *testing.T) { err = EpollCtl(epollfd, unix.EPOLL_CTL_ADD, rfd2, event) err = syscall.Close(rfd2) MustNil(t, err) - _, err = EpollWait(epollfd, events, -1) + _, err = epollWaitUntil(epollfd, events, -1) MustNil(t, err) Assert(t, events[0].events&syscall.EPOLLIN != 0) Assert(t, events[0].events&syscall.EPOLLOUT != 0) @@ -174,7 +174,7 @@ func TestEpollETClose(t *testing.T) { // EPOLL: init state err = EpollCtl(epollfd, unix.EPOLL_CTL_ADD, rfd, event) - _, err = EpollWait(epollfd, events, -1) + _, err = epollWaitUntil(epollfd, events, -1) MustNil(t, err) Assert(t, events[0].events&syscall.EPOLLIN == 0) Assert(t, events[0].events&syscall.EPOLLOUT != 0) @@ -185,7 +185,7 @@ func TestEpollETClose(t *testing.T) { // nothing will happen err = syscall.Close(rfd) MustNil(t, err) - n, err := EpollWait(epollfd, events, 100) + n, err := epollWaitUntil(epollfd, events, 100) MustNil(t, err) Assert(t, n == 0, n) err = syscall.Close(wfd) @@ -197,7 +197,7 @@ func TestEpollETClose(t *testing.T) { err = EpollCtl(epollfd, unix.EPOLL_CTL_ADD, rfd, event) err = syscall.Close(wfd) MustNil(t, err) - n, err = EpollWait(epollfd, events, 100) + n, err = epollWaitUntil(epollfd, events, 100) MustNil(t, err) Assert(t, n == 1, n) Assert(t, events[0].events&syscall.EPOLLIN != 0) @@ -231,7 +231,7 @@ func TestEpollETDel(t *testing.T) { MustNil(t, err) _, err = syscall.Write(wfd, send) MustNil(t, err) - _, err = EpollWait(epollfd, events, 100) + _, err = epollWaitUntil(epollfd, events, 100) MustNil(t, err) Assert(t, events[0].events&syscall.EPOLLIN == 0) Assert(t, events[0].events&syscall.EPOLLRDHUP == 0) @@ -272,7 +272,7 @@ func TestEpollConnectSameFD(t *testing.T) { MustNil(t, err) err = syscall.Connect(fd1, &addr) t.Log(err) - _, err = EpollWait(epollfd, events, -1) + _, err = epollWaitUntil(epollfd, events, -1) MustNil(t, err) Assert(t, events[0].events&syscall.EPOLLOUT != 0) Assert(t, events[0].events&syscall.EPOLLRDHUP == 0) @@ -293,7 +293,7 @@ func TestEpollConnectSameFD(t *testing.T) { MustNil(t, err) err = syscall.Connect(fd2, &addr) t.Log(err) - _, err = EpollWait(epollfd, events, -1) + _, err = epollWaitUntil(epollfd, events, -1) MustNil(t, err) Assert(t, events[0].events&syscall.EPOLLOUT != 0) Assert(t, events[0].events&syscall.EPOLLRDHUP == 0) @@ -314,7 +314,7 @@ func TestEpollConnectSameFD(t *testing.T) { MustNil(t, err) err = syscall.Connect(fd3, &addr) t.Log(err) - _, err = EpollWait(epollfd, events, -1) + _, err = epollWaitUntil(epollfd, events, -1) MustNil(t, err) Assert(t, events[0].events&syscall.EPOLLOUT != 0) Assert(t, events[0].events&syscall.EPOLLRDHUP == 0) @@ -324,7 +324,16 @@ func TestEpollConnectSameFD(t *testing.T) { MustNil(t, err) err = syscall.Close(fd3) // close fd3 MustNil(t, err) - n, err := EpollWait(epollfd, events, 100) + n, err := epollWaitUntil(epollfd, events, 100) MustNil(t, err) Assert(t, n == 0) } + +func epollWaitUntil(epfd int, events []epollevent, msec int) (n int, err error) { +WAIT: + n, err = EpollWait(epfd, events, msec) + if err == syscall.EINTR { + goto WAIT + } + return n, err +}