- eval { $self->{inot}->poll }; # Linux::Inotify2::poll
- warn "$self->{inot}->poll err: $@\n" if $@;
+ my $cb = $self->{cb};
+ local $PublicInbox::DS::in_loop = 0; # waitpid() synchronously
+ eval {
+ my @events = $self->{inot}->read; # Linux::Inotify2->read
+ $cb->($_) for @events;
+ };
+ warn "$self->{inot}->read err: $@\n" if $@;
+}
+
+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: $!";
+ } elsif ($inot->isa('Linux::Inotify2')) {
+ require PublicInbox::LI2Wrap;
+ PublicInbox::LI2Wrap::wrapclose($inot);
+ }