X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FDaemon.pm;h=3d582e355ed70d40f6b9689f791f5e08f0c81d67;hb=d7fda3f4b9d4c9e6d01c818f09905d6827fa693f;hp=278c80f56ca74d9603383b01f69f23c84100b471;hpb=57b19e788ed43d15487aac9927183b26a86c7d92;p=public-inbox.git
diff --git a/lib/PublicInbox/Daemon.pm b/lib/PublicInbox/Daemon.pm
index 278c80f5..3d582e35 100644
--- a/lib/PublicInbox/Daemon.pm
+++ b/lib/PublicInbox/Daemon.pm
@@ -1,4 +1,4 @@
-# Copyright (C) 2015-2019 all contributors
+# Copyright (C) 2015-2020 all contributors
# License: AGPL-3.0+
# contains common daemon code for the nntpd and httpd servers.
# This may be used for read-only IMAP server if we decide to implement it.
@@ -403,6 +403,9 @@ sub upgrade { # $_[0] = signal name or number (unused)
$ENV{LISTEN_FDS} = scalar @listeners;
$ENV{LISTEN_PID} = $$;
foreach my $s (@listeners) {
+ # @listeners are globs with workers, PI::L w/o workers
+ $s = $s->{sock} if ref($s) eq 'PublicInbox::Listener';
+
my $fl = fcntl($s, F_GETFD, 0);
fcntl($s, F_SETFD, $fl &= ~FD_CLOEXEC);
}
@@ -566,11 +569,12 @@ sub defer_accept ($$) {
my ($s, $af_name) = @_;
return unless defined $af_name;
if ($^O eq 'linux') {
- my $x = getsockopt($s, IPPROTO_TCP, Socket::TCP_DEFER_ACCEPT());
+ my $TCP_DEFER_ACCEPT = 9; # Socket::TCP_DEFER_ACCEPT is in 5.14+
+ my $x = getsockopt($s, IPPROTO_TCP, $TCP_DEFER_ACCEPT);
return unless defined $x; # may be Unix socket
my $sec = unpack('i', $x);
return if $sec > 0; # systemd users may set a higher value
- setsockopt($s, IPPROTO_TCP, Socket::TCP_DEFER_ACCEPT(), 1);
+ setsockopt($s, IPPROTO_TCP, $TCP_DEFER_ACCEPT, 1);
} elsif ($^O eq 'freebsd') {
my $x = getsockopt($s, SOL_SOCKET, SO_ACCEPTFILTER);
return if defined $x; # don't change if set
@@ -601,11 +605,10 @@ sub daemon_loop ($$$$) {
WINCH => 'IGNORE',
CHLD => \&PublicInbox::DS::enqueue_reap,
};
- my $parent_pipe;
if ($worker_processes > 0) {
$refresh->(); # preload by default
my $fh = master_loop(); # returns if in child process
- $parent_pipe = PublicInbox::ParentPipe->new($fh, *worker_quit);
+ PublicInbox::ParentPipe->new($fh, \&worker_quit);
} else {
reopen_logs();
$set_user->() if $set_user;