From: Eric Wong Date: Tue, 26 Sep 2023 07:44:39 +0000 (+0000) Subject: spamcheck/spamc: rely on ProcessPipe instead of waitpid X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=344897c0b27e061e41f2660f3c7a3de9a7b78452;p=thirdparty%2Fpublic-inbox.git spamcheck/spamc: rely on ProcessPipe instead of waitpid We lose error information on CORE::close call, but the underlying close(2) syscall won't EIO nor ENOSPC on a read-only side of a pipe. Perl is already shielding us from EINTR and EBADF would be a bug in Perl itself. --- diff --git a/lib/PublicInbox/Spamcheck/Spamc.pm b/lib/PublicInbox/Spamcheck/Spamc.pm index 2f8215324..672789172 100644 --- a/lib/PublicInbox/Spamcheck/Spamc.pm +++ b/lib/PublicInbox/Spamcheck/Spamc.pm @@ -21,14 +21,13 @@ sub spamcheck { my ($self, $msg, $out) = @_; my $rdr = { 0 => _msg_to_fh($self, $msg) }; - my ($fh, $pid) = popen_rd($self->{checkcmd}, undef, $rdr); + my $fh = popen_rd($self->{checkcmd}, undef, $rdr); unless (ref $out) { my $buf = ''; $out = \$buf; } $$out = do { local $/; <$fh> }; - close $fh or die "close failed: $!"; - waitpid($pid, 0); + close $fh; # PublicInbox::ProcessPipe::CLOSE ($? || $$out eq '') ? 0 : 1; }