Reset gets called on END{} anyways to workaround DBI lifetime problems, so there's no need to call it near exit.
We'll also replace many calls to POSIX::_exit with the normal `exit'. This ensures END{} gets called since all of our destructors are fork-safe nowadays so POSIX::_exit is unnecessary. --- lib/PublicInbox/CodeSearchIdx.pm | 1 - lib/PublicInbox/Daemon.pm | 1 - lib/PublicInbox/IO.pm | 6 ++---- lib/PublicInbox/TestCommon.pm | 2 +- lib/PublicInbox/Watch.pm | 6 +++--- lib/PublicInbox/Xapcmd.pm | 6 +++--- 6 files changed, 9 insertions(+), 13 deletions(-) diff --git a/lib/PublicInbox/CodeSearchIdx.pm b/lib/PublicInbox/CodeSearchIdx.pm index 3764f13e..bb1d698b 100644 --- a/lib/PublicInbox/CodeSearchIdx.pm +++ b/lib/PublicInbox/CodeSearchIdx.pm @@ -1292,7 +1292,6 @@ sub cidx_run { # main entry point local @PublicInbox::DS::post_loop_do = (\&shards_active); PublicInbox::DS::event_loop($MY_SIG, $SIGSET); - PublicInbox::DS->Reset; $self->lock_release(!!$NCHANGE); show_json($self); } diff --git a/lib/PublicInbox/Daemon.pm b/lib/PublicInbox/Daemon.pm index f33f6f17..a2c1ed6e 100644 --- a/lib/PublicInbox/Daemon.pm +++ b/lib/PublicInbox/Daemon.pm @@ -703,7 +703,6 @@ sub run { local %POST_ACCEPT; daemon_loop(); - PublicInbox::DS->Reset; # ->DESTROY runs when $for_destroy goes out-of-scope } diff --git a/lib/PublicInbox/IO.pm b/lib/PublicInbox/IO.pm index 6593dcdf..5654f3b0 100644 --- a/lib/PublicInbox/IO.pm +++ b/lib/PublicInbox/IO.pm @@ -15,10 +15,8 @@ use Errno qw(EINTR EAGAIN); sub waitcb { # awaitpid callback my ($pid, $errref, $cb, @args) = @_; - $errref //= \my $workaround_await_pids_clobbered; - $$errref = $?; # sets .cerr for _close + $$errref = $? if $errref; # sets .cerr for _close $cb->($pid, @args) if $cb; # may clobber $? - $? = $$errref; } sub attach_pid { @@ -52,7 +50,7 @@ sub close { } else { # wait synchronously my $w = awaitpid($reap->[1]); } - $? ? '' : $ret; # use $?, AWAIT_PIDS may be cleared on ->Reset (FIXME?) + $? ? '' : $ret; } sub DESTROY { diff --git a/lib/PublicInbox/TestCommon.pm b/lib/PublicInbox/TestCommon.pm index 361a2356..9595da1a 100644 --- a/lib/PublicInbox/TestCommon.pm +++ b/lib/PublicInbox/TestCommon.pm @@ -579,7 +579,7 @@ sub start_script { undef $tmp_mask; if ($sub) { _run_sub($sub, $key, \@argv); - POSIX::_exit($? >> 8); + exit($? >> 8); } else { exec(key2script($key), @argv); die "FAIL: ",join(' ', $key, @argv), ": $!\n"; diff --git a/lib/PublicInbox/Watch.pm b/lib/PublicInbox/Watch.pm index b83a77eb..bef8187c 100644 --- a/lib/PublicInbox/Watch.pm +++ b/lib/PublicInbox/Watch.pm @@ -15,7 +15,7 @@ use PublicInbox::Spamcheck; use PublicInbox::DS qw(now add_timer awaitpid); use PublicInbox::MID qw(mids); use PublicInbox::ContentHash qw(content_hash); -use POSIX qw(_exit WNOHANG); +use POSIX qw(WNOHANG); sub compile_watchheaders ($) { my ($ibx) = @_; @@ -418,7 +418,7 @@ sub imap_idle_fork { if ($pid == 0) { watch_atfork_child($self); watch_imap_idle_1($self, $uri, $intvl); - _exit(0); + exit(0); } $self->{pids}->{$pid} = undef; awaitpid($pid, \&imap_idle_reap, $self, $uri, $intvl); @@ -480,7 +480,7 @@ sub poll_fetch_fork { # DS::add_timer callback watch_atfork_child($self); watch_imap_fetch_all($self, \@imap) if @imap; watch_nntp_fetch_all($self, \@nntp) if @nntp; - _exit(0); + exit(0); } $self->{pids}->{$pid} = undef; awaitpid($pid, \&poll_fetch_reap, $self, $intvl, $uris); diff --git a/lib/PublicInbox/Xapcmd.pm b/lib/PublicInbox/Xapcmd.pm index 69f0af43..dd0fe6c5 100644 --- a/lib/PublicInbox/Xapcmd.pm +++ b/lib/PublicInbox/Xapcmd.pm @@ -10,7 +10,7 @@ use PublicInbox::Search qw(xap_terms); use PublicInbox::SearchIdx; use File::Temp 0.19 (); # ->newdir use File::Path qw(remove_tree); -use POSIX qw(WNOHANG _exit); +use POSIX qw(WNOHANG); use PublicInbox::DS; # support testing with dev versions of Xapian which installs @@ -105,9 +105,9 @@ sub cb_spawn { my ($cb, $args, $opt) = @_; # $cb = cpdb() or compact() my $pid = PublicInbox::DS::do_fork; return $pid if $pid > 0; - $SIG{__DIE__} = sub { warn @_; _exit(1) }; # don't jump up stack + $SIG{__DIE__} = sub { warn @_; exit(1) }; # don't jump up stack $cb->($args, $opt); - _exit(0); + exit(0); } sub runnable_or_die ($) {