]> git.ipfire.org Git - thirdparty/public-inbox.git/commitdiff
xapcmd: get rid of scalar wantarray popen_rd
authorEric Wong <e@80x24.org>
Thu, 9 Nov 2023 10:09:44 +0000 (10:09 +0000)
committerEric Wong <e@80x24.org>
Thu, 9 Nov 2023 21:53:53 +0000 (21:53 +0000)
We can rely on Process::IO->attached_pid and work towards
simplifying popen_rd.

lib/PublicInbox/Xapcmd.pm

index c2b66e69dccef1ee85f34ae9325f02887f173963..69f0af4329a6d3e08c27ea802770a1cd55510a1a 100644 (file)
@@ -329,8 +329,8 @@ sub progress_pfx ($) {
 }
 
 sub kill_compact { # setup_signals callback
-       my ($sig, $pidref) = @_;
-       kill($sig, $$pidref) if defined($$pidref);
+       my ($sig, $ioref) = @_;
+       kill($sig, $$ioref->attached_pid // return) if defined($$ioref);
 }
 
 # xapian-compact wrapper
@@ -358,18 +358,16 @@ sub compact ($$) { # cb_spawn callback
        }
        $pr->("$pfx `".join(' ', @$cmd)."'\n") if $pr;
        push @$cmd, $src, $dst;
-       my ($rd, $pid);
        local @SIG{keys %SIG} = values %SIG;
-       setup_signals(\&kill_compact, \$pid);
-       ($rd, $pid) = popen_rd($cmd, undef, $rdr);
+       setup_signals(\&kill_compact, \my $rd);
+       $rd = popen_rd($cmd, undef, $rdr);
        while (<$rd>) {
                if ($pr) {
                        s/\r/\r$pfx /g;
                        $pr->("$pfx $_");
                }
        }
-       waitpid($pid, 0);
-       die "@$cmd failed: \$?=$?\n" if $?;
+       $rd->close or die "@$cmd failed: \$?=$?\n";
 }
 
 sub cpdb_loop ($$$;$$) {