From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-4.0 required=3.0 tests=ALL_TRUSTED,BAYES_00 shortcircuit=no autolearn=ham autolearn_force=no version=3.4.0 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id A3DDD1FF40; Wed, 14 Dec 2016 19:28:30 +0000 (UTC) Date: Wed, 14 Dec 2016 19:28:30 +0000 From: Eric Wong To: spew@80x24.org Subject: [PATCH] tick Message-ID: <20161214192830.GA7305@starla> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline List-Id: --- lib/PublicInbox/Daemon.pm | 2 ++ lib/PublicInbox/HTTP.pm | 1 + lib/PublicInbox/Listener.pm | 9 +++++++-- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/PublicInbox/Daemon.pm b/lib/PublicInbox/Daemon.pm index 37aa418..8dedb71 100644 --- a/lib/PublicInbox/Daemon.pm +++ b/lib/PublicInbox/Daemon.pm @@ -485,4 +485,6 @@ sub write_pid ($) { do_chown($path); } +sub tick () { $_->active_tick for @listeners } + 1; diff --git a/lib/PublicInbox/HTTP.pm b/lib/PublicInbox/HTTP.pm index cac14be..25e9015 100644 --- a/lib/PublicInbox/HTTP.pm +++ b/lib/PublicInbox/HTTP.pm @@ -65,6 +65,7 @@ sub new ($$$) { sub event_read { # called by Danga::Socket my ($self) = @_; + PublicInbox::Daemon::tick(); return event_read_input($self) if defined $self->{env}; diff --git a/lib/PublicInbox/Listener.pm b/lib/PublicInbox/Listener.pm index 5f351a7..c603e61 100644 --- a/lib/PublicInbox/Listener.pm +++ b/lib/PublicInbox/Listener.pm @@ -7,7 +7,7 @@ use strict; use warnings; use base 'Danga::Socket'; use Socket qw(SOL_SOCKET SO_KEEPALIVE IPPROTO_TCP TCP_NODELAY); -use fields qw(post_accept); +use fields qw(post_accept active); require IO::Handle; sub new ($$$) { @@ -28,10 +28,15 @@ sub event_read { my $sock = $self->{sock}; # no loop here, we want to fairly distribute clients # between multiple processes sharing the same socket - if (my $addr = accept(my $c, $sock)) { + if (my $addr = $self->{active} = accept(my $c, $sock)) { IO::Handle::blocking($c, 0); # no accept4 :< $self->{post_accept}->($c, $addr, $sock); } } +sub active_tick { + my ($self) = @_; + event_read($self) if $self->{active}; +} + 1; -- EW