about summary refs log tree commit homepage
path: root/lib
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2021-02-07 08:51:50 +0000
committerEric Wong <e@80x24.org>2021-02-07 22:57:01 +0000
commite076ce0dc6094216e16451b7e69322a8c06ce935 (patch)
treed4c6b2fb7139f5d20b117e4eb6f5aff2bf6c2c49 /lib
parent10e6d3b7dca7e32f1af38a734800e36e7c354654 (diff)
downloadpublic-inbox-e076ce0dc6094216e16451b7e69322a8c06ce935.tar.gz
Make some notes about sub usage, this may be converted
to use workqueues once the cmsg dependency is dropped.
Diffstat (limited to 'lib')
-rw-r--r--lib/PublicInbox/Xapcmd.pm11
1 files 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;