From d9c9dc5af637e097d545a828d887aae99ddcd2a7 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sat, 24 Jun 2017 00:52:10 +0000 Subject: [PATCH] spamc: retry on EINTR Signals can fire on us at any time if we're using blocking sysread. --- lib/PublicInbox/Spamcheck/Spamc.pm | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) 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; -- 2.44.0