]> git.ipfire.org Git - thirdparty/public-inbox.git/commitdiff
watch: simplify DirIdle object cleanup
authorEric Wong <e@80x24.org>
Tue, 31 Oct 2023 20:42:53 +0000 (20:42 +0000)
committerEric Wong <e@80x24.org>
Wed, 1 Nov 2023 07:08:10 +0000 (07:08 +0000)
There's no need to waste time nor reach into DS internals to
map FDs to Perl objects, here.  LEI.pm has never had to deal
with integer FDs for DirIdle, either.

lib/PublicInbox/Watch.pm

index 41b77dc1e482a0e65f2725d8658312fea2550b6b..c2b1312a94ee208246db29009b53a8420ceba552 100644 (file)
@@ -256,9 +256,8 @@ sub quit { # may be called in IMAP/NNTP children
        %{$self->{opendirs}} = ();
        _done_for_now($self);
        quit_done($self);
-       if (defined(my $fd = delete $self->{dir_idle_fd})) {
-               my $di = $PublicInbox::DS::DescriptorMap{$fd};
-               $di->close if $di && $di->can('add_watches');
+       if (my $dir_idle = delete $self->{dir_idle}) {
+               $dir_idle->close if $dir_idle;
        }
        if (my $idle_mic = delete $self->{idle_mic}) { # IMAP child
                return unless $idle_mic->IsConnected && $idle_mic->Socket;
@@ -283,8 +282,7 @@ sub watch_fs_init ($) {
        };
        require PublicInbox::DirIdle;
        # inotify_create + EPOLL_CTL_ADD
-       my $dir_idle = PublicInbox::DirIdle->new($cb);
-       $self->{dir_idle_fd} = fileno($dir_idle->{sock}) if $dir_idle->{sock};
+       my $dir_idle = $self->{dir_idle} = PublicInbox::DirIdle->new($cb);
        $dir_idle->add_watches([keys %{$self->{mdmap}}]);
 }
 
@@ -383,8 +381,7 @@ sub watch_imap_idle_1 ($$$) {
 
 sub watch_atfork_child ($) {
        my ($self) = @_;
-       delete $self->{pids};
-       delete $self->{opendirs};
+       delete @$self{qw(dir_idle pids opendirs)};
        my $sig = delete $self->{sig};
        $sig->{CHLD} = $sig->{HUP} = $sig->{USR1} = 'DEFAULT';
        # TERM/QUIT/INT call ->quit, which works in both parent+child