user/dev discussion of public-inbox itself
 help / color / mirror / code / Atom feed
Search results ordered by [date|relevance]  view[summary|nested|Atom feed]
thread overview below | download mbox.gz: |
* [PATCH 04/19] spawn_pp: die more consistently in child
  2021-02-07  8:51  6% [PATCH 00/19] lei import Maildir, remote mboxrd fixes Eric Wong
@ 2021-02-07  8:51  7% ` Eric Wong
  0 siblings, 0 replies; 2+ results
From: Eric Wong @ 2021-02-07  8:51 UTC (permalink / raw)
  To: meta

The default $SIG{__DIE__} inside a forked child doesn't actually
do what we want it to do.  We don't want it to zip up the stack
the parent used, but instead want to exit the child process
after warning.
---
 lib/PublicInbox/SpawnPP.pm | 20 +++++++++-----------
 1 file changed, 9 insertions(+), 11 deletions(-)

diff --git a/lib/PublicInbox/SpawnPP.pm b/lib/PublicInbox/SpawnPP.pm
index 401cb78d..2c5edef6 100644
--- a/lib/PublicInbox/SpawnPP.pm
+++ b/lib/PublicInbox/SpawnPP.pm
@@ -22,15 +22,15 @@ sub pi_fork_exec ($$$$$$$) {
 		$pid = -1;
 	}
 	if ($pid == 0) {
+		$SIG{__DIE__} = sub { warn @_; _exit 1 };
 		for my $child_fd (0..$#$redir) {
 			my $parent_fd = $redir->[$child_fd];
 			next if $parent_fd == $child_fd;
 			dup2($parent_fd, $child_fd) or
-				die "dup2($parent_fd, $child_fd): $!\n";
+				die "dup2($parent_fd, $child_fd): $!";
 		}
 		if ($pgid >= 0 && !defined(setpgid(0, $pgid))) {
-			warn "setpgid: $!";
-			_exit(1);
+			die "setpgid(0, $pgid): $!";
 		}
 		$SIG{$_} = 'DEFAULT' for keys %SIG;
 		if ($cd ne '') {
@@ -39,20 +39,18 @@ sub pi_fork_exec ($$$$$$$) {
 		while (@$rlim) {
 			my ($r, $soft, $hard) = splice(@$rlim, 0, 3);
 			BSD::Resource::setrlimit($r, $soft, $hard) or
-			  warn "failed to set $r=[$soft,$hard]\n";
+				die "setrlimit($r=[$soft,$hard]: $!)";
 		}
 		$old->delset(POSIX::SIGCHLD) or die "delset SIGCHLD: $!";
 		sigprocmask(SIG_SETMASK, $old) or die "SETMASK: ~SIGCHLD: $!";
+		$cmd->[0] = $f;
 		if ($ENV{MOD_PERL}) {
-			exec which('env'), '-i', @$env, @$cmd;
-			die "exec env -i ... $cmd->[0] failed: $!\n";
+			@$cmd = (which('env'), '-i', @$env, @$cmd);
 		} else {
-			local %ENV = map { split(/=/, $_, 2) } @$env;
-			my @cmd = @$cmd;
-			$cmd[0] = $f;
-			exec @cmd;
-			die "exec $cmd->[0] failed: $!\n";
+			%ENV = map { split(/=/, $_, 2) } @$env;
 		}
+		exec @$cmd;
+		die "exec @$cmd failed: $!";
 	}
 	sigprocmask(SIG_SETMASK, $old) or die "can't unblock signals: $!";
 	$! = $syserr;

^ permalink raw reply related	[relevance 7%]

* [PATCH 00/19] lei import Maildir, remote mboxrd fixes
@ 2021-02-07  8:51  6% Eric Wong
  2021-02-07  8:51  7% ` [PATCH 04/19] spawn_pp: die more consistently in child Eric Wong
  0 siblings, 1 reply; 2+ results
From: Eric Wong @ 2021-02-07  8:51 UTC (permalink / raw)
  To: meta

"lei q" with remote mboxrd + early MUA spawning is
nicer, too.  Several risky constructs eliminated,

Interrupting "add-external --mirror" is less bad, now;
though it could probably support indexlevel=none in
case somebody wants to run index themselves.

Eric Wong (19):
  spawn: pi_fork_exec: restore parent sigmask in child
  spawn: pi_fork_exec: support "pgid"
  lei add-external: handle interrupts with --mirror
  spawn_pp: die more consistently in child
  ipc: do not die inside wq_worker child process
  ipc: trim down the Storable checks
  Makefile.PL: depend on IO::Uncompress::Gunzip
  xapcmd: avoid potential die surprise in children
  tests: guard setup_public_inboxes for SQLite and Xapian
  Revert "ipc: add support for asynchronous callbacks"
  ipc: wq_do => wq_io_do
  lei: more consistent IPC exit and error handling
  lei: remove --mua-cmd alias for --mua
  lei: replace --thread with --threads
  lei q: improve remote mboxrd UX
  lei q: SIGWINCH process group with the terminal
  lei import: support Maildirs
  imap: avoid unnecessary delete on stack
  httpd/async: avoid unnecessary on-stack delete

 Documentation/lei-q.pod        |   4 +-
 MANIFEST                       |   1 +
 Makefile.PL                    |   1 +
 lib/PublicInbox/HTTPD/Async.pm |   2 +-
 lib/PublicInbox/IMAP.pm        |   6 +-
 lib/PublicInbox/IPC.pm         | 105 +++++++-----------------
 lib/PublicInbox/LEI.pm         |  49 +++++++----
 lib/PublicInbox/LeiCurl.pm     |  11 ++-
 lib/PublicInbox/LeiHelp.pm     |   6 +-
 lib/PublicInbox/LeiImport.pm   |  38 ++++++---
 lib/PublicInbox/LeiMirror.pm   |  75 ++++++++++-------
 lib/PublicInbox/LeiOverview.pm |   7 +-
 lib/PublicInbox/LeiQuery.pm    |   4 +-
 lib/PublicInbox/LeiStore.pm    |   8 +-
 lib/PublicInbox/LeiToMail.pm   |  37 ++++-----
 lib/PublicInbox/LeiXSearch.pm  | 143 ++++++++++++++++++++-------------
 lib/PublicInbox/Mbox.pm        |   2 +-
 lib/PublicInbox/OnDestroy.pm   |   2 +-
 lib/PublicInbox/Search.pm      |   2 +-
 lib/PublicInbox/SearchView.pm  |   2 +-
 lib/PublicInbox/Spawn.pm       |  63 +++++++++------
 lib/PublicInbox/SpawnPP.pm     |  44 +++++-----
 lib/PublicInbox/Xapcmd.pm      |  11 +--
 script/lei                     |   8 +-
 t/ipc.t                        |  39 ++-------
 t/lei-externals.t              |   2 +
 t/lei-import-maildir.t         |  33 ++++++++
 t/lei-mirror.t                 |  14 ++++
 t/lei.t                        |   2 +-
 t/lei_to_mail.t                |   6 +-
 t/spawn.t                      |  18 +++++
 xt/stress-sharedkv.t           |   6 +-
 32 files changed, 433 insertions(+), 318 deletions(-)
 create mode 100644 t/lei-import-maildir.t


^ permalink raw reply	[relevance 6%]

Results 1-2 of 2 | reverse | options above
-- pct% links below jump to the message on this page, permalinks otherwise --
2021-02-07  8:51  6% [PATCH 00/19] lei import Maildir, remote mboxrd fixes Eric Wong
2021-02-07  8:51  7% ` [PATCH 04/19] spawn_pp: die more consistently in child Eric Wong

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).