my ($self, $wq) = @_;
        @$self{qw(0 1 2 sock)} = delete(@$wq{0..3});
        %PATH2CFG = ();
+       $quit = \&CORE::exit;
        @TO_CLOSE_ATFORK_CHILD = ();
        (__WARN__ => sub { err($self, @_) },
        PIPE => sub {
        return if $pid;
        $0 = "lei-daemon $path";
        local %PATH2CFG;
-       local @TO_CLOSE_ATFORK_CHILD = ($l, $eof_r, $eof_w);
-       $_->blocking(0) for ($l, $eof_r, $eof_w);
+       local @TO_CLOSE_ATFORK_CHILD = ($l, $eof_w);
+       $l->blocking(0);
        $l = PublicInbox::Listener->new($l, \&accept_dispatch, $l);
        my $exit_code;
        local $quit = sub {
                PublicInbox::DS->SetLoopTimeout(1000);
        };
        PublicInbox::EOFpipe->new($eof_r, \&noop, undef);
+       undef $eof_r;
        my $sig = {
                CHLD => \&PublicInbox::DS::enqueue_reap,
                QUIT => $quit,
        };
        my $sigfd = PublicInbox::Sigfd->new($sig, SFD_NONBLOCK);
        local @SIG{keys %$sig} = values(%$sig) unless $sigfd;
+       undef $sig;
        local $SIG{PIPE} = 'IGNORE';
        if ($sigfd) { # TODO: use inotify/kqueue to detect unlinked sockets
-               push @TO_CLOSE_ATFORK_CHILD, $sigfd->{sock};
+               undef $sigfd;
                PublicInbox::DS->SetLoopTimeout(5000);
        } else {
                # wake up every second to accept signals if we don't