Maildir scanning still happens in the main process. Scanning
dozens of Maildirs is still time-consuming and monopolizes the
event loop during WatchMaildir::event_step. This can cause
cause zombies to accumulate before Sigfd::event_step triggers
DS::reap_pids.
---
lib/PublicInbox/WatchMaildir.pm | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/lib/PublicInbox/WatchMaildir.pm b/lib/PublicInbox/WatchMaildir.pm
index 288f64d1e6c..d147962994e 100644
--- a/lib/PublicInbox/WatchMaildir.pm
+++ b/lib/PublicInbox/WatchMaildir.pm
@@ -123,9 +123,9 @@ sub new {
sub _done_for_now {
my ($self) = @_;
- my $importers = $self->{importers};
- foreach my $im (values %$importers) {
- $im->done;
+ local $PublicInbox::DS::in_loop = 0; # waitpid() synchronlusly
+ for (values %{$self->{importers}}) {
+ $_->done if $_; # $_ may be undef during cleanup
}
}
@@ -936,6 +936,7 @@ sub fs_scan_step {
my ($self) = @_;
return if $self->{quit};
my $op = shift @{$self->{ops}};
+ local $PublicInbox::DS::in_loop = 0; # waitpid() synchronlusly
# continue existing scan
my $max = 10;
--
unsubscribe: one-click, see List-Unsubscribe header
archive: https://public-inbox.org/meta/