From: Eric Wong <e@80x24.org>
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 [thread overview]
Message-ID: <20210207085201.13871-9-e@80x24.org> (raw)
In-Reply-To: <20210207085201.13871-1-e@80x24.org>
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;
next prev parent reply other threads:[~2021-02-07 8:52 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-07 8:51 [PATCH 00/19] lei import Maildir, remote mboxrd fixes Eric Wong
2021-02-07 8:51 ` [PATCH 01/19] spawn: pi_fork_exec: restore parent sigmask in child Eric Wong
2021-02-07 8:51 ` [PATCH 02/19] spawn: pi_fork_exec: support "pgid" Eric Wong
2021-02-07 23:10 ` dprintf(3) portability? [was [02/19] spawn: pi_fork_exec: support "pgid"] Eric Wong
2021-02-07 8:51 ` [PATCH 03/19] lei add-external: handle interrupts with --mirror Eric Wong
2021-02-07 8:51 ` [PATCH 04/19] spawn_pp: die more consistently in child Eric Wong
2021-02-07 8:51 ` [PATCH 05/19] ipc: do not die inside wq_worker child process Eric Wong
2021-02-07 8:51 ` [PATCH 06/19] ipc: trim down the Storable checks Eric Wong
2021-02-07 8:51 ` [PATCH 07/19] Makefile.PL: depend on IO::Uncompress::Gunzip Eric Wong
2021-02-07 8:51 ` Eric Wong [this message]
2021-02-07 8:51 ` [PATCH 09/19] tests: guard setup_public_inboxes for SQLite and Xapian Eric Wong
2021-02-07 8:51 ` [PATCH 10/19] Revert "ipc: add support for asynchronous callbacks" Eric Wong
2021-02-07 8:51 ` [PATCH 11/19] ipc: wq_do => wq_io_do Eric Wong
2021-02-07 8:51 ` [PATCH 12/19] lei: more consistent IPC exit and error handling Eric Wong
2021-02-07 8:51 ` [PATCH 13/19] lei: remove --mua-cmd alias for --mua Eric Wong
2021-02-07 8:51 ` [PATCH 14/19] lei: replace --thread with --threads Eric Wong
2021-02-07 8:51 ` [PATCH 15/19] lei q: improve remote mboxrd UX Eric Wong
2021-02-07 9:32 ` [PATCH 20/19] lei_xsearch: allow quieting regular mset progress, too Eric Wong
2021-02-07 8:51 ` [PATCH 16/19] lei q: SIGWINCH process group with the terminal Eric Wong
2021-02-07 8:51 ` [PATCH 17/19] lei import: support Maildirs Eric Wong
2021-02-07 8:52 ` [PATCH 18/19] imap: avoid unnecessary on-stack delete Eric Wong
2021-02-07 8:52 ` [PATCH 19/19] httpd/async: " Eric Wong
2021-02-07 10:40 ` [PATCH 21/19] lei q: fix arbitrary --mua command handling Eric Wong
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://public-inbox.org/README
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210207085201.13871-9-e@80x24.org \
--to=e@80x24.org \
--cc=meta@public-inbox.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/public-inbox.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).