]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/DS.pm
DS: workaround IO::Kqueue EINTR (mis-)handling
[public-inbox.git] / lib / PublicInbox / DS.pm
index 7bd5d42b9b2aaef8ab73acd356c4d66b6225d9ea..ea09fc96ed6cc9f38af0d629c2d358d0b3ef8ec1 100644 (file)
@@ -428,7 +428,15 @@ sub KQueueEventLoop {
 
     while (1) {
         my $timeout = RunTimers();
-        my @ret = $KQueue->kevent($timeout);
+        my @ret = eval { $KQueue->kevent($timeout) };
+        if (my $err = $@) {
+            # workaround https://rt.cpan.org/Ticket/Display.html?id=116615
+            if ($err =~ /Interrupted system call/) {
+                @ret = ();
+            } else {
+                die $err;
+            }
+        }
 
         foreach my $kev (@ret) {
             my ($fd, $filter, $flags, $fflags) = @$kev;