diff options
author | Eric Wong <e@80x24.org> | 2023-11-09 10:09:44 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2023-11-09 21:53:53 +0000 |
commit | e82342c911eeb91a4f50a5392d197c83ef15a07c (patch) | |
tree | 6e27237cec5daf32bda57151f53ba1c3a3063c3c /lib/PublicInbox | |
parent | d974977afda1b887313e0143dfa740604b2fc740 (diff) | |
download | public-inbox-e82342c911eeb91a4f50a5392d197c83ef15a07c.tar.gz |
We can rely on Process::IO->attached_pid and work towards simplifying popen_rd.
Diffstat (limited to 'lib/PublicInbox')
-rw-r--r-- | lib/PublicInbox/Xapcmd.pm | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/lib/PublicInbox/Xapcmd.pm b/lib/PublicInbox/Xapcmd.pm index c2b66e69..69f0af43 100644 --- a/lib/PublicInbox/Xapcmd.pm +++ b/lib/PublicInbox/Xapcmd.pm @@ -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 ($$$;$$) { |