about summary refs log tree commit homepage
path: root/lib/PublicInbox/LEI.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/PublicInbox/LEI.pm')
-rw-r--r--lib/PublicInbox/LEI.pm17
1 files changed, 8 insertions, 9 deletions
diff --git a/lib/PublicInbox/LEI.pm b/lib/PublicInbox/LEI.pm
index 81f940fe..e9a0de6c 100644
--- a/lib/PublicInbox/LEI.pm
+++ b/lib/PublicInbox/LEI.pm
@@ -9,7 +9,7 @@ package PublicInbox::LEI;
 use v5.12;
 use parent qw(PublicInbox::DS PublicInbox::LeiExternal
         PublicInbox::LeiQuery);
-use autodie qw(bind chdir fork open pipe socket socketpair syswrite unlink);
+use autodie qw(bind chdir open pipe socket socketpair syswrite unlink);
 use Getopt::Long ();
 use Socket qw(AF_UNIX SOCK_SEQPACKET pack_sockaddr_un);
 use Errno qw(EPIPE EAGAIN ECONNREFUSED ENOENT ECONNRESET);
@@ -24,6 +24,7 @@ use PublicInbox::Lock;
 use PublicInbox::Eml;
 use PublicInbox::Import;
 use PublicInbox::ContentHash qw(git_sha);
+use PublicInbox::OnDestroy;
 use PublicInbox::IPC;
 use Time::HiRes qw(stat); # ctime comparisons for config cache
 use File::Path ();
@@ -176,6 +177,7 @@ our %CMD = ( # sorted in order of importance/use:
         'stdin|', # /|\z/ must be first for lone dash
         @lxs_opt, @net_opt,
         qw(save! output|mfolder|o=s format|f=s dedupe|d=s threads|t+
+        thread-id|T=s
         sort|s=s reverse|r offset=i pretty jobs|j=s globoff|g augment|a
         import-before! lock=s@ rsyncable alert=s@ mua=s verbose|v+
         shared color! mail-sync!), @c_opt, opt_dash('limit|n=i', '[0-9]+') ],
@@ -631,9 +633,8 @@ sub _delete_pkt_op { # OnDestroy callback to prevent leaks on die
 
 sub pkt_op_pair {
         my ($self) = @_;
-        require PublicInbox::OnDestroy;
         require PublicInbox::PktOp;
-        my $end = PublicInbox::OnDestroy->new($$, \&_delete_pkt_op, $self);
+        my $end = on_destroy \&_delete_pkt_op, $self;
         @$self{qw(pkt_op_c pkt_op_p)} = PublicInbox::PktOp->pair;
         $end;
 }
@@ -727,8 +728,6 @@ sub optparse ($$$) {
                 require PublicInbox::LeiInput;
                 my @err = PublicInbox::LeiInput::vmd_mod_extract($self, $argv);
                 return $self->fail(join("\n", @err)) if @err;
-        } else {
-                warn "proto $proto\n" if $cmd =~ /(add-watch|tag|index)/;
         }
 
         my $i = 0;
@@ -1357,7 +1356,7 @@ sub lazy_start {
         STDIN->autoflush(1);
         dump_and_clear_log();
         POSIX::setsid() > 0 or die "setsid: $!";
-        my $pid = fork;
+        my $pid = PublicInbox::OnDestroy::fork_tmp;
         return if $pid;
         $0 = "lei-daemon $path";
         local (%PATH2CFG, $MDIR2CFGPATH);
@@ -1444,7 +1443,7 @@ sub wq_eof { # EOF callback for main daemon
         my ($lei, $wq_fld) = @_;
         local $current_lei = $lei;
         my $wq = delete $lei->{$wq_fld // 'wq1'};
-        $lei->sto_done_request($wq);
+        $lei->sto_barrier_request($wq);
         $wq // $lei->fail; # already failed
 }
 
@@ -1549,7 +1548,7 @@ sub lms {
         (-f $f || $creat) ? PublicInbox::LeiMailSync->new($f) : undef;
 }
 
-sub sto_done_request {
+sub sto_barrier_request {
         my ($lei, $wq) = @_;
         return unless $lei->{sto} && $lei->{sto}->{-wq_s1};
         local $current_lei = $lei;
@@ -1559,7 +1558,7 @@ sub sto_done_request {
                 my $s = ($wq ? $wq->{lei_sock} : undef) // $lei->{sock};
                 my $errfh = $lei->{2} // *STDERR{GLOB};
                 my @io = $s ? ($errfh, $s) : ($errfh);
-                eval { $lei->{sto}->wq_io_do('done', \@io) };
+                eval { $lei->{sto}->wq_io_do('barrier', \@io, 1) };
         }
         warn($@) if $@;
 }