my $end = $fds + 2; # LISTEN_FDS_START - 1
my @rv = ();
foreach my $fd (3..$end) {
- my $s = IO::Handle->new_from_fd($fd, 'r');
+ open(my $s, '<&=', $fd) or warn "fdopen fd=$fd: $!";
if (my $k = sockname($s)) {
my $prev_was_blocking = $s->blocking(0);
warn <<"" if $prev_was_blocking;
CHLD => \&reap_children,
};
my $sigfd = PublicInbox::Sigfd->new($sig, 0);
- local %SIG = (%SIG, %$sig) if !$sigfd;
+ local @SIG{keys %$sig} = values(%$sig) unless $sigfd;
PublicInbox::DS::sig_setmask($oldset) if !$sigfd;
while (1) { # main loop
my $n = scalar keys %pids;
if ($n <= $want) {
PublicInbox::DS::block_signals() if !$sigfd;
for my $i ($n..$want) {
+ my $seed = rand(0xffffffff);
my $pid = fork;
if (!defined $pid) {
warn "failed to fork worker[$i]: $!\n";
} elsif ($pid == 0) {
+ srand($seed);
+ eval { Net::SSLeay::randomize() };
$set_user->() if $set_user;
return $p0; # run normal work code
} else {
PublicInbox::Listener->new($_, $tls_cb || $post_accept)
} @listeners;
my $sigfd = PublicInbox::Sigfd->new($sig, SFD_NONBLOCK);
- local %SIG = (%SIG, %$sig) if !$sigfd;
+ local @SIG{keys %$sig} = values(%$sig) unless $sigfd;
if (!$sigfd) {
# wake up every second to accept signals if we don't
# have signalfd or IO::KQueue: