}
}
+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;
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);
}
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 $@;
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