]> Sergey Matveev's repositories - public-inbox.git/commitdiff
lei: reduce FD pressure from lei2mail worker
authorEric Wong <e@80x24.org>
Wed, 3 Feb 2021 08:11:33 +0000 (22:11 -1000)
committerEric Wong <e@80x24.org>
Thu, 4 Feb 2021 01:37:09 +0000 (01:37 +0000)
lei2mail doesn't need stdin anymore, so we can use the [0] slot
for the $not_done keepalive purposes.

lib/PublicInbox/LeiOverview.pm
lib/PublicInbox/LeiToMail.pm

index 52da225dea7fb983d5c58fb440e6551706009791..88034adadaed4e5d9551199964203d4ae0f5d401 100644 (file)
@@ -217,13 +217,13 @@ sub ovv_each_smsg_cb { # runs in wq worker usually
                };
        } elsif ($l2m && $l2m->{-wq_s1}) {
                my ($lei_ipc, @io) = $lei->atfork_parent_wq($l2m);
-               # $io[-1] becomes a notification pipe that triggers EOF
+               # $io[0] becomes a notification pipe that triggers EOF
                # in this wq worker when all outstanding ->write_mail
                # calls are complete
-               pipe($l2m->{each_smsg_done}, $io[$#io + 1]) or die "pipe: $!";
-               fcntl($io[-1], 1031, 4096) if $^O eq 'linux'; # F_SETPIPE_SZ
+               $io[0] = undef;
+               pipe($l2m->{each_smsg_done}, $io[0]) or die "pipe: $!";
+               fcntl($io[0], 1031, 4096) if $^O eq 'linux'; # F_SETPIPE_SZ
                delete @$lei_ipc{qw(l2m opt mset_opt cmd)};
-               $lei_ipc->{each_smsg_not_done} = $#io;
                my $git = $ibxish->git; # (LeiXSearch|Inbox|ExtSearch)->git
                $self->{git} = $git;
                my $git_dir = $git->{git_dir};
index c6c5f84b7a08b0a0a16a89ee3ce32d002de0fb20..c704dc2a111399c19585f7e1be7b4ef7d5b5cedc 100644 (file)
@@ -464,7 +464,7 @@ sub post_augment { # fast (spawn compressor or mkdir), runs in main daemon
 
 sub write_mail { # via ->wq_do
        my ($self, $git_dir, $smsg, $lei) = @_;
-       my $not_done = delete $self->{$lei->{each_smsg_not_done}};
+       my $not_done = delete $self->{0} // die 'BUG: $not_done missing';
        my $wcb = $self->{wcb} //= do { # first message
                $lei->atfork_child_wq($self);
                $self->write_cb($lei);