about summary refs log tree commit homepage
path: root/lib
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2021-01-31 22:28:25 -1000
committerEric Wong <e@80x24.org>2021-02-01 11:38:18 +0000
commitb436cf6e4794a32b3331a8727d10bf000ba55de2 (patch)
treebd651e482efa01c07061d5d73d6d141f154e80ab /lib
parent2e8256ba1ced49a686bf5ff1c97375f8ccb30d4a (diff)
downloadpublic-inbox-b436cf6e4794a32b3331a8727d10bf000ba55de2.tar.gz
PublicInbox::Listener unconditionally sets O_NONBLOCK upon
accept(), so we need a larger timeout under heavy load since
there's no "dataready" accept filter on the listener.

With O_NONBLOCK already set, we don't have to set it at
->event_step_init
Diffstat (limited to 'lib')
-rw-r--r--lib/PublicInbox/LEI.pm7
1 files changed, 4 insertions, 3 deletions
diff --git a/lib/PublicInbox/LEI.pm b/lib/PublicInbox/LEI.pm
index 08554932..e2f22a75 100644
--- a/lib/PublicInbox/LEI.pm
+++ b/lib/PublicInbox/LEI.pm
@@ -824,7 +824,7 @@ sub accept_dispatch { # Listener {post_accept} callback
         $sock->autoflush(1);
         my $self = bless { sock => $sock }, __PACKAGE__;
         vec(my $rvec = '', fileno($sock), 1) = 1;
-        select($rvec, undef, undef, 1) or
+        select($rvec, undef, undef, 60) or
                 return send($sock, 'timed out waiting to recv FDs', MSG_EOR);
         my @fds = $recv_cmd->($sock, my $buf, 4096 * 33); # >MAX_ARG_STRLEN
         if (scalar(@fds) == 4) {
@@ -834,7 +834,9 @@ sub accept_dispatch { # Listener {post_accept} callback
                         send($sock, "open(+<&=$fd) (FD=$i): $!", MSG_EOR);
                 }
         } else {
-                return send($sock, "recv_cmd failed: $!", MSG_EOR);
+                my $msg = "recv_cmd failed: $!";
+                warn $msg;
+                return send($sock, $msg, MSG_EOR);
         }
         $self->{2}->autoflush(1); # keep stdout buffered until x_it|DESTROY
         # $ENV_STR = join('', map { "\0$_=$ENV{$_}" } keys %ENV);
@@ -898,7 +900,6 @@ sub event_step {
 sub event_step_init {
         my ($self) = @_;
         if (my $sock = $self->{sock}) { # using DS->EventLoop
-                $sock->blocking(0);
                 $self->SUPER::new($sock, EPOLLIN|EPOLLET);
         }
 }