We don't want FS activity to delay lei-daemon shutdown.
---
 lib/PublicInbox/DirIdle.pm | 12 +++++++++---
 lib/PublicInbox/LEI.pm     |  5 +++++
 2 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/lib/PublicInbox/DirIdle.pm b/lib/PublicInbox/DirIdle.pm
index af99811c..de6f229b 100644
--- a/lib/PublicInbox/DirIdle.pm
+++ b/lib/PublicInbox/DirIdle.pm
@@ -68,10 +68,16 @@ sub rm_watches {
        }
 }
 
+sub close {
+       my ($self) = @_;
+       delete $self->{cb};
+       $self->SUPER::close; # if using real kevent/inotify
+}
+
 sub event_step {
        my ($self) = @_;
-       my $cb = $self->{cb};
-       local $PublicInbox::DS::in_loop = 0; # waitpid() synchronously
+       my $cb = $self->{cb} or return;
+       local $PublicInbox::DS::in_loop = 0; # waitpid() synchronously (FIXME)
        eval {
                my @events = $self->{inot}->read; # Linux::Inotify2->read
                $cb->($_) for @events;
@@ -83,7 +89,7 @@ sub force_close {
        my ($self) = @_;
        my $inot = delete $self->{inot} // return;
        if ($inot->can('fh')) { # Linux::Inotify2 2.3+
-               close($inot->fh) or warn "CLOSE ERROR: $!";
+               CORE::close($inot->fh) or warn "CLOSE ERROR: $!";
        } elsif ($inot->isa('Linux::Inotify2')) {
                require PublicInbox::LI2Wrap;
                PublicInbox::LI2Wrap::wrapclose($inot);
diff --git a/lib/PublicInbox/LEI.pm b/lib/PublicInbox/LEI.pm
index 74a7f5b9..8362800d 100644
--- a/lib/PublicInbox/LEI.pm
+++ b/lib/PublicInbox/LEI.pm
@@ -1285,8 +1285,11 @@ sub can_stay_alive { # PublicInbox::DS::post_loop_do cb
        }
        return 1 if defined($$path);
        my $n = PublicInbox::DS::close_non_busy() or do {
+               eval 'PublicInbox::LeiNoteEvent::flush_task()';
                # drop stores only if no clients
                for my $cfg (values %PATH2CFG) {
+                       my $lne = delete($cfg->{-lei_note_event});
+                       $lne->wq_close if $lne;
                        my $sto = delete($cfg->{-lei_store}) // next;
                        eval { $sto->wq_io_do('done') };
                        warn "E: $@ (dropping store for $cfg->{-f})" if $@;
@@ -1346,6 +1349,8 @@ sub lazy_start {
                my (undef, $eof_p) = PublicInbox::PktOp->pair;
                sub {
                        $exit_code //= eval("POSIX::SIG$_[0] + 128") if @_;
+                       $dir_idle->close if $dir_idle; # EPOLL_CTL_DEL
+                       $dir_idle = undef; # let RC take care of it
                        eval 'PublicInbox::LeiNoteEvent::flush_task()';
                        my $lis = $pil or exit($exit_code // 0);
                        # closing eof_p triggers \&noop wakeup

Reply via email to