about summary refs log tree commit homepage
path: root/ext/sleepy_penguin/epoll.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/sleepy_penguin/epoll.c')
-rw-r--r--ext/sleepy_penguin/epoll.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/ext/sleepy_penguin/epoll.c b/ext/sleepy_penguin/epoll.c
index 90ecc2c..9010e2d 100644
--- a/ext/sleepy_penguin/epoll.c
+++ b/ext/sleepy_penguin/epoll.c
@@ -147,8 +147,12 @@ static VALUE epwait_result(struct ep_per_thread *ept, int n)
         struct epoll_event *epoll_event = ept->events;
         VALUE obj_events, obj;
 
-        if (n < 0)
-                rb_sys_fail("epoll_wait");
+        if (n < 0) {
+                if (errno == EINTR)
+                        n = 0;
+                else
+                        rb_sys_fail("epoll_wait");
+        }
 
         for (i = n; --i >= 0; epoll_event++) {
                 obj_events = UINT2NUM(epoll_event->events);