]> Sergey Matveev's repositories - public-inbox.git/commitdiff
dir_idle: do not add watches in ->new
authorEric Wong <e@80x24.org>
Sat, 16 Oct 2021 01:00:53 +0000 (01:00 +0000)
committerEric Wong <e@80x24.org>
Sat, 16 Oct 2021 01:42:48 +0000 (01:42 +0000)
There's no savings in having two ways to add watches to an
inotify nor kqueue descriptor.

lib/PublicInbox/DirIdle.pm
lib/PublicInbox/LEI.pm
lib/PublicInbox/Watch.pm
t/dir_idle.t

index c9a293e9355a222bf3416fcd4617b3276d41cded..270d3829bc3e25669a433def9346bca0a0d927ff 100644 (file)
@@ -32,7 +32,7 @@ if ($^O eq 'linux' && eval { require Linux::Inotify2; 1 }) {
 }
 
 sub new {
-       my ($class, $dirs, $cb, $gone) = @_;
+       my ($class, $cb) = @_;
        my $self = bless { cb => $cb }, $class;
        my $inot;
        if ($ino_cls) {
@@ -43,13 +43,7 @@ sub new {
                require PublicInbox::FakeInotify;
                $inot = PublicInbox::FakeInotify->new; # starts timer
        }
-
-       # Linux::Inotify2->watch or similar
-       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;
 }
 
index 7dfd33989186d479c9f1b796599e29ff52d49fc1..a526a91f80355a6d8430494688cf61ebc5bf4749 100644 (file)
@@ -1305,10 +1305,11 @@ sub lazy_start {
                USR2 => \&noop,
        };
        require PublicInbox::DirIdle;
-       local $dir_idle = PublicInbox::DirIdle->new([$sock_dir], sub {
+       local $dir_idle = PublicInbox::DirIdle->new(sub {
                # just rely on wakeup to hit PostLoopCallback set below
                dir_idle_handler($_[0]) if $_[0]->fullname ne $path;
-       }, 1);
+       });
+       $dir_idle->add_watches([$sock_dir]);
        PublicInbox::DS->SetPostLoopCallback(sub {
                my ($dmap, undef) = @_;
                if (@st = defined($path) ? stat($path) : ()) {
index c6bebce32edb3ea3a919065d4cf0a8f72dbc2341..b48d9cccc3e2b791958720aff4e06c187617149d 100644 (file)
@@ -282,7 +282,8 @@ sub watch_fs_init ($) {
        };
        require PublicInbox::DirIdle;
        # inotify_create + EPOLL_CTL_ADD
-       PublicInbox::DirIdle->new([keys %{$self->{mdmap}}], $cb);
+       my $dir_idle = PublicInbox::DirIdle->new($cb);
+       $dir_idle->add_watches([keys %{$self->{mdmap}}]);
 }
 
 sub net_cb { # NetReader::(nntp|imap)_each callback
index 8e7f3b70eec492c60db932cb807a1ce0a25c6b2b..19e54967bf8066af57f5cddb5d8c24936a8277fa 100644 (file)
@@ -9,7 +9,8 @@ my ($tmpdir, $for_destroy) = tmpdir();
 make_path("$tmpdir/a/b", "$tmpdir/c");
 my @x;
 my $cb = sub { push @x, \@_ };
-my $di = PublicInbox::DirIdle->new(["$tmpdir/a", "$tmpdir/c"], $cb, 1);
+my $di = PublicInbox::DirIdle->new($cb);
+$di->add_watches(["$tmpdir/a", "$tmpdir/c"], 1);
 PublicInbox::DS->SetLoopTimeout(1000);
 my $end = 3 + now;
 PublicInbox::DS->SetPostLoopCallback(sub { scalar(@x) == 0 && now < $end });