about summary refs log tree commit homepage
path: root/ext/sleepy_penguin/kqueue.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/sleepy_penguin/kqueue.c')
-rw-r--r--ext/sleepy_penguin/kqueue.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/ext/sleepy_penguin/kqueue.c b/ext/sleepy_penguin/kqueue.c
index 155204b..4d5785f 100644
--- a/ext/sleepy_penguin/kqueue.c
+++ b/ext/sleepy_penguin/kqueue.c
@@ -158,8 +158,12 @@ static VALUE kevent_result(struct kq_per_thread *kpt, int nevents)
         int i;
         struct kevent *event = kpt->events;
 
-        if (nevents < 0)
-                rb_sys_fail("kevent");
+        if (nevents < 0) {
+                if (errno == EINTR)
+                        nevents = 0;
+                else
+                        rb_sys_fail("kevent");
+        }
 
         for (i = nevents; --i >= 0; event++)
                 yield_kevent(event);