lib/PublicInbox/LEI.pm | 11 ++++++++---
lib/PublicInbox/LeiImportKw.pm | 4 +---
lib/PublicInbox/LeiNoteEvent.pm | 4 +---
lib/PublicInbox/LeiPmdir.pm | 6 ++----
diff --git a/lib/PublicInbox/LEI.pm b/lib/PublicInbox/LEI.pm
index 4bd9183e969247da542c2c70a8b4d9935c8b8733..93b4ea03b67d58a9193b99e3970e94e221b2aff9 100644
--- a/lib/PublicInbox/LEI.pm
+++ b/lib/PublicInbox/LEI.pm
@@ -660,6 +660,7 @@ $wq1->net_merge_all_done;
for my $wq (grep(defined, @$lei{qw(ikw pmd)})) { # auxiliary WQs
$wq->wq_close;
}
+ $wq1->{lei_sock} = $lei->{sock} if $wq1;
$op_c->{ops} = $ops;
}
@@ -1405,9 +1406,11 @@ chdir($dh) || die "fchdir: $!";
}
sub wq_eof { # EOF callback for main daemon
- my ($lei) = @_;
+ my ($lei, $wq_fld) = @_;
local $current_lei = $lei;
- delete $lei->{wq1} // return $lei->fail; # already failed
+ my $wq = delete $lei->{$wq_fld // 'wq1'};
+ $lei->sto_done_request($wq);
+ $wq // $lei->fail; # already failed
}
sub watch_state_ok ($) {
@@ -1514,8 +1517,10 @@ (-f $f || $creat) ? PublicInbox::LeiMailSync->new($f) : undef;
}
sub sto_done_request {
- my ($lei, $sock) = @_;
+ my ($lei, $wq) = @_;
+ return unless $lei->{sto};
local $current_lei = $lei;
+ my $sock = $wq ? $wq->{lei_sock} : undef;
eval {
if ($sock //= $lei->{sock}) { # issue, async wait
$lei->{sto}->wq_io_do('done', [ $sock ]);
diff --git a/lib/PublicInbox/LeiImportKw.pm b/lib/PublicInbox/LeiImportKw.pm
index 52fd40436a7d262187eee11f70700a68c095eff8..4dd938f5c12c85ad41d1ed322aad9a33d59c49b8 100644
--- a/lib/PublicInbox/LeiImportKw.pm
+++ b/lib/PublicInbox/LeiImportKw.pm
@@ -47,9 +47,7 @@ $self->{sto}->wq_do('set_eml_vmd', undef, { kw => $kw }, \@docids);
}
sub _lei_wq_eof { # EOF callback for main lei daemon
- my ($lei) = @_;
- my $ikw = delete $lei->{ikw} or return $lei->fail;
- $lei->sto_done_request($ikw->{lei_sock});
+ $_[0]->wq_eof('ikw');
}
1;
diff --git a/lib/PublicInbox/LeiNoteEvent.pm b/lib/PublicInbox/LeiNoteEvent.pm
index 22d6ffac9feb7e4cfabbb96d88542a58fc61ae30..db387633e877c9e3b8bbfd3c4458a12b8695188a 100644
--- a/lib/PublicInbox/LeiNoteEvent.pm
+++ b/lib/PublicInbox/LeiNoteEvent.pm
@@ -114,9 +114,7 @@ $self->SUPER::ipc_atfork_child;
}
sub _lei_wq_eof { # EOF callback for main lei daemon
- my ($lei) = @_;
- my $lne = delete $lei->{lne} or return $lei->fail;
- $lei->sto_done_request($lne->{lei_sock});
+ $_[0]->wq_eof('lne');
}
1;
diff --git a/lib/PublicInbox/LeiPmdir.pm b/lib/PublicInbox/LeiPmdir.pm
index f9b68fc2a2d83b660f6101d97fc20e96136f3f45..d4aa0212bea7dfb4ce3766cf13eb20c040eb0ecc 100644
--- a/lib/PublicInbox/LeiPmdir.pm
+++ b/lib/PublicInbox/LeiPmdir.pm
@@ -1,4 +1,4 @@
-# Copyright (C) 2021 all contributors
+# Copyright (C) all contributors
# License: AGPL-3.0+
# WQ worker for dealing with parallel Maildir reads;
@@ -48,9 +48,7 @@ $self->{ipt}->pmdir_cb($f, $fl, @args);
}
sub _lei_wq_eof { # EOF callback for main lei daemon
- my ($lei) = @_;
- my $pmd = delete $lei->{pmd} or return $lei->fail;
- $lei->sto_done_request($pmd->{lei_sock});
+ $_[0]->wq_eof('pmd');
}
1;