X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FWQWorker.pm;h=950bd17052a569b7e6792f875791d801525d821d;hb=refs%2Fheads%2Fmaster;hp=3636321e901eab5b365922331ee819767d8777b8;hpb=3b2b02a411b161e2392c3a5b1c376c83573b027e;p=public-inbox.git diff --git a/lib/PublicInbox/WQWorker.pm b/lib/PublicInbox/WQWorker.pm index 3636321e..950bd170 100644 --- a/lib/PublicInbox/WQWorker.pm +++ b/lib/PublicInbox/WQWorker.pm @@ -6,28 +6,27 @@ package PublicInbox::WQWorker; use strict; use v5.10.1; use parent qw(PublicInbox::DS); -use PublicInbox::Syscall qw(EPOLLIN EPOLLEXCLUSIVE EPOLLET); +use PublicInbox::Syscall qw(EPOLLIN EPOLLEXCLUSIVE); use Errno qw(EAGAIN ECONNRESET); use IO::Handle (); # blocking sub new { - my ($cls, $wq, $field) = @_; - my $s2 = $wq->{$field // '-wq_s2'} // die "BUG: no {$field}"; - $s2->blocking(0); - my $self = bless { sock => $s2, wq => $wq }, $cls; - $self->SUPER::new($s2, EPOLLEXCLUSIVE|EPOLLIN|EPOLLET); + my ($cls, $wq, $sock) = @_; + $sock->blocking(0); + my $self = bless { sock => $sock, wq => $wq }, $cls; + $self->SUPER::new($sock, EPOLLEXCLUSIVE|EPOLLIN); $self; } sub event_step { my ($self) = @_; - my $n; - do { - $n = $self->{wq}->recv_and_run($self->{sock}, 4096 * 33); - } while ($n); - return if !defined($n) && $! == EAGAIN; # likely - warn "wq worker error: $!\n" if !defined($n) && $! != ECONNRESET; - $self->{wq}->wq_atexit_child if $self->{sock} == $self->{wq}->{-wq_s2}; + my $n = $self->{wq}->recv_and_run($self->{sock}) and return; + unless (defined $n) { + return if $! == EAGAIN; + warn "recvmsg: $!" if $! != ECONNRESET; + } + $self->{sock} == $self->{wq}->{-wq_s2} and + $self->{wq}->wq_atexit_child; $self->close; # PublicInbox::DS::close }