From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-Status: No, score=-3.9 required=3.0 tests=ALL_TRUSTED,AWL,BAYES_00 shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id 4296B1FB09 for ; Sun, 7 Feb 2021 08:52:02 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH 08/19] xapcmd: avoid potential die surprise in children Date: Sun, 7 Feb 2021 08:51:50 +0000 Message-Id: <20210207085201.13871-9-e@80x24.org> In-Reply-To: <20210207085201.13871-1-e@80x24.org> References: <20210207085201.13871-1-e@80x24.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: Make some notes about sub usage, this may be converted to use workqueues once the cmsg dependency is dropped. --- lib/PublicInbox/Xapcmd.pm | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/lib/PublicInbox/Xapcmd.pm b/lib/PublicInbox/Xapcmd.pm index 269aa99a..e2d67f6a 100644 --- a/lib/PublicInbox/Xapcmd.pm +++ b/lib/PublicInbox/Xapcmd.pm @@ -9,7 +9,7 @@ use PublicInbox::SearchIdx; use File::Temp 0.19 (); # ->newdir use File::Path qw(remove_tree); use File::Basename qw(dirname); -use POSIX qw(WNOHANG); +use POSIX qw(WNOHANG _exit); # support testing with dev versions of Xapian which installs # commands with a version number suffix (e.g. "xapian-compact-1.5") @@ -93,8 +93,9 @@ sub cb_spawn { my $pid = fork // die "fork: $!"; return $pid if $pid > 0; srand($seed); + $SIG{__DIE__} = sub { warn @_; _exit(1) }; # don't jump up stack $cb->($args, $opt); - POSIX::_exit(0); + _exit(0); } sub runnable_or_die ($) { @@ -237,7 +238,7 @@ sub prepare_run { sub check_compact () { runnable_or_die($XAPIAN_COMPACT) } -sub _run { +sub _run { # with_umask callback my ($ibx, $cb, $opt) = @_; my $im = $ibx->importer(0); $im->lock_acquire; @@ -303,7 +304,7 @@ sub kill_compact { # setup_signals callback } # xapian-compact wrapper -sub compact ($$) { +sub compact ($$) { # cb_spawn callback my ($args, $opt) = @_; my ($src, $newdir) = @$args; my $dst = ref($newdir) ? $newdir->dirname : $newdir; @@ -384,7 +385,7 @@ sub cpdb_loop ($$$;$$) { # Like copydatabase(1), this is horribly slow; and it doesn't seem due # to the overhead of Perl. -sub cpdb ($$) { +sub cpdb ($$) { # cb_spawn callback my ($args, $opt) = @_; my ($old, $newdir) = @$args; my $new = $newdir->dirname;