]> Sergey Matveev's repositories - public-inbox.git/commitdiff
replace ParentPipe with EOFpipe
authorEric Wong <e@80x24.org>
Mon, 31 Aug 2020 04:41:40 +0000 (04:41 +0000)
committerEric Wong <e@80x24.org>
Tue, 1 Sep 2020 00:19:21 +0000 (00:19 +0000)
ParentPipe was a subset of EOFpipe, except EOFpipe correctly
accounts for theoretical(*) spurious wakeups on the pipe.

(*) AFAIK, spurious wakeups are/were more likely on TCP sockets
    due to checksum failures, something that's not a problem on
    local pipes.  We're also not sharing pipes like we do with
    listen sockets on accept(2), so there's no chance of another
    process grabbing bytes (unless we have bugs in our code).

MANIFEST
lib/PublicInbox/Daemon.pm
lib/PublicInbox/ParentPipe.pm [deleted file]

index 0b3835d8a1aa0c4d28ebd91249abc8e447d0624e..b65e96b071f5f662df87863754f664dd16510112 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -169,7 +169,6 @@ lib/PublicInbox/NNTPdeflate.pm
 lib/PublicInbox/NewsWWW.pm
 lib/PublicInbox/Over.pm
 lib/PublicInbox/OverIdx.pm
-lib/PublicInbox/ParentPipe.pm
 lib/PublicInbox/ProcessPipe.pm
 lib/PublicInbox/Qspawn.pm
 lib/PublicInbox/Reply.pm
index 454751834fd20fa6f5140be152a59c0793d221b4..000ba1695d666bb7eed68677b5418e7bb8bbe23a 100644 (file)
@@ -17,7 +17,7 @@ STDERR->autoflush(1);
 use PublicInbox::DS qw(now);
 use PublicInbox::Syscall qw($SFD_NONBLOCK);
 require PublicInbox::Listener;
-require PublicInbox::ParentPipe;
+use PublicInbox::EOFpipe;
 use PublicInbox::Sigfd;
 my @CMD;
 my ($set_user, $oldset);
@@ -468,8 +468,6 @@ sub master_quit ($) {
 
 sub master_loop {
        pipe(my ($p0, $p1)) or die "failed to create parent-pipe: $!";
-       # 1031: F_SETPIPE_SZ, 4096: page size
-       fcntl($p1, 1031, 4096) if $^O eq 'linux';
        my $set_workers = $worker_processes;
        reopen_logs();
        my $ignore_winch;
@@ -603,7 +601,7 @@ sub daemon_loop ($$$$) {
        if ($worker_processes > 0) {
                $refresh->(); # preload by default
                my $fh = master_loop(); # returns if in child process
-               PublicInbox::ParentPipe->new($fh, \&worker_quit);
+               PublicInbox::EOFpipe->new($fh, \&worker_quit, undef);
        } else {
                reopen_logs();
                $set_user->() if $set_user;
diff --git a/lib/PublicInbox/ParentPipe.pm b/lib/PublicInbox/ParentPipe.pm
deleted file mode 100644 (file)
index 538b563..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-# Copyright (C) 2016-2020 all contributors <meta@public-inbox.org>
-# License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
-
-# only for PublicInbox::Daemon, allows worker processes to be
-# notified if the master process dies.
-package PublicInbox::ParentPipe;
-use strict;
-use parent qw(PublicInbox::DS);
-use PublicInbox::Syscall qw(EPOLLIN EPOLLONESHOT);
-
-sub new ($$$) {
-       my ($class, $pipe, $worker_quit) = @_;
-       my $self = bless { cb => $worker_quit }, $class;
-       $self->SUPER::new($pipe, EPOLLIN|EPOLLONESHOT);
-}
-
-# master process died, time to call worker_quit ourselves
-sub event_step {
-       $_[0]->close; # PublicInbox::DS::close
-       $_[0]->{cb}->();
-}
-
-1;