about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2021-01-21 19:46:20 +0000
committerEric Wong <e@80x24.org>2021-01-22 16:18:01 -0400
commit3e11b08275331783f4860a590b1555b879c77328 (patch)
tree05a0c523e5a62fa1778aa921c56c0e40b8f2762f
parentd035e8d0ec8c7e38ff921fc65e4925644721bb36 (diff)
downloadpublic-inbox-3e11b08275331783f4860a590b1555b879c77328.tar.gz
The signal handlers on the client side were unnecessary,
all we need is to handle socket EOF properly in the daemon
by killing xsearch and l2m workers.
-rw-r--r--lib/PublicInbox/IPC.pm1
-rw-r--r--lib/PublicInbox/LEI.pm9
-rwxr-xr-xscript/lei5
3 files changed, 9 insertions, 6 deletions
diff --git a/lib/PublicInbox/IPC.pm b/lib/PublicInbox/IPC.pm
index 24f45e03..dbb87e4e 100644
--- a/lib/PublicInbox/IPC.pm
+++ b/lib/PublicInbox/IPC.pm
@@ -408,6 +408,7 @@ sub DESTROY {
         my $ppid = $self->{-wq_ppid};
         wq_kill($self) if $ppid && $ppid == $$;
         wq_close($self);
+        wq_wait_old($self);
         ipc_worker_stop($self);
 }
 
diff --git a/lib/PublicInbox/LEI.pm b/lib/PublicInbox/LEI.pm
index 11ea385f..ccfc1649 100644
--- a/lib/PublicInbox/LEI.pm
+++ b/lib/PublicInbox/LEI.pm
@@ -767,7 +767,14 @@ sub accept_dispatch { # Listener {post_accept} callback
 
 sub dclose {
         my ($self) = @_;
-        delete $self->{lxs}; # stops LeiXSearch queries
+        for my $f (qw(lxs l2m)) {
+                my $wq = delete $self->{$f} or next;
+                if ($wq->wq_kill) {
+                        $self->wq_close
+                } elsif ($wq->wq_kill_old) {
+                        $wq->wq_wait_old;
+                }
+        }
         close(delete $self->{1}) if $self->{1}; # may reap_compress
         $self->close if $self->{sock}; # PublicInbox::DS::close
 }
diff --git a/script/lei b/script/lei
index a4a0217b..8dcea562 100755
--- a/script/lei
+++ b/script/lei
@@ -81,11 +81,6 @@ Falling back to (slow) one-shot mode
         while (my ($k, $v) = each %ENV) { $buf .= "\0$k=$v" }
         $buf .= "\0\0";
         $send_cmd->($sock, [ 0, 1, 2, fileno($dh) ], $buf, MSG_EOR);
-        $SIG{TERM} = $SIG{INT} = $SIG{QUIT} = sub {
-                my ($sig) = @_; # 'TERM', not an integer :<
-                $SIG{$sig} = 'DEFAULT';
-                kill($sig, $$); # exit($signo + 128)
-        };
         my $x_it_code = 0;
         while (1) {
                 my (@fds) = $recv_cmd->($sock, $buf, 4096 * 33);