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 | 11 ++++-------
 1 file changed, 4 insertions(+), 7 deletions(-)

diff --git a/lib/PublicInbox/Watch.pm b/lib/PublicInbox/Watch.pm
index 41b77dc1..c2b1312a 100644
--- a/lib/PublicInbox/Watch.pm
+++ b/lib/PublicInbox/Watch.pm
@@ -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

Reply via email to