diff options
author | Eric Wong <e@80x24.org> | 2017-06-24 00:52:10 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2017-06-26 03:07:46 +0000 |
commit | d9c9dc5af637e097d545a828d887aae99ddcd2a7 (patch) | |
tree | 5f95d9cc56ba7722c7c48533fa8b4c53e6e2fca7 | |
parent | 5bde05b66f084c7c9dcf7389079aab6925aef328 (diff) | |
download | public-inbox-d9c9dc5af637e097d545a828d887aae99ddcd2a7.tar.gz |
Signals can fire on us at any time if we're using blocking sysread.
-rw-r--r-- | lib/PublicInbox/Spamcheck/Spamc.pm | 6 |
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; |