diff options
Diffstat (limited to 'lib/PublicInbox/DirIdle.pm')
-rw-r--r-- | lib/PublicInbox/DirIdle.pm | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/lib/PublicInbox/DirIdle.pm b/lib/PublicInbox/DirIdle.pm index 5437190d..e53fd9d1 100644 --- a/lib/PublicInbox/DirIdle.pm +++ b/lib/PublicInbox/DirIdle.pm @@ -8,22 +8,25 @@ use parent 'PublicInbox::DS'; use PublicInbox::Syscall qw(EPOLLIN EPOLLET); use PublicInbox::In2Tie; -my ($MAIL_IN, $ino_cls); +my ($MAIL_IN, $MAIL_GONE, $ino_cls); if ($^O eq 'linux' && eval { require Linux::Inotify2; 1 }) { $MAIL_IN = Linux::Inotify2::IN_MOVED_TO() | Linux::Inotify2::IN_CREATE(); + $MAIL_GONE = Linux::Inotify2::IN_DELETE(); $ino_cls = 'Linux::Inotify2'; # Perl 5.22+ is needed for fileno(DIRHANDLE) support: } elsif ($^V ge v5.22 && eval { require PublicInbox::KQNotify }) { $MAIL_IN = PublicInbox::KQNotify::MOVED_TO_OR_CREATE(); + $MAIL_GONE = PublicInbox::KQNotify::NOTE_DELETE(); $ino_cls = 'PublicInbox::KQNotify'; } else { require PublicInbox::FakeInotify; $MAIL_IN = PublicInbox::FakeInotify::MOVED_TO_OR_CREATE(); + $MAIL_GONE = PublicInbox::FakeInotify::IN_DELETE(); } sub new { - my ($class, $dirs, $cb) = @_; + my ($class, $dirs, $cb, $gone) = @_; my $self = bless { cb => $cb }, $class; my $inot; if ($ino_cls) { @@ -36,7 +39,9 @@ sub new { } # Linux::Inotify2->watch or similar - $inot->watch($_, $MAIL_IN) for @$dirs; + my $fl = $MAIL_IN; + $fl |= $MAIL_GONE if $gone; + $inot->watch($_, $fl) for @$dirs; $self->{inot} = $inot; PublicInbox::FakeInotify::poll_once($self) if !$ino_cls; $self; |