about summary refs log tree commit homepage
path: root/lib
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2017-06-24 00:52:10 +0000
committerEric Wong <e@80x24.org>2017-06-26 03:07:46 +0000
commitd9c9dc5af637e097d545a828d887aae99ddcd2a7 (patch)
tree5f95d9cc56ba7722c7c48533fa8b4c53e6e2fca7 /lib
parent5bde05b66f084c7c9dcf7389079aab6925aef328 (diff)
downloadpublic-inbox-d9c9dc5af637e097d545a828d887aae99ddcd2a7.tar.gz
Signals can fire on us at any time if we're using blocking sysread.
Diffstat (limited to 'lib')
-rw-r--r--lib/PublicInbox/Spamcheck/Spamc.pm6
1 files changed, 5 insertions, 1 deletions
diff --git a/lib/PublicInbox/Spamcheck/Spamc.pm b/lib/PublicInbox/Spamcheck/Spamc.pm
index 30eec95c..ba8e44a4 100644
--- a/lib/PublicInbox/Spamcheck/Spamc.pm
+++ b/lib/PublicInbox/Spamcheck/Spamc.pm
@@ -29,10 +29,14 @@ sub spamcheck {
                 my $buf = '';
                 $out = \$buf;
         }
+again:
         do {
                 $r = sysread($fh, $$out, 65536, length($$out));
         } while (defined($r) && $r != 0);
-        defined $r or die "read failed: $!";
+        unless (defined $r) {
+                goto again if $!{EINTR};
+                die "read failed: $!";
+        }
         close $fh or die "close failed: $!";
         waitpid($pid, 0);
         ($? || $$out eq '') ? 0 : 1;