From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) 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.2 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id C832A1F4B7 for ; Sat, 29 Jun 2019 19:59:51 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH 02/11] ds: move requeue logic over from NNTP Date: Sat, 29 Jun 2019 19:59:42 +0000 Message-Id: <20190629195951.32160-3-e@80x24.org> In-Reply-To: <20190629195951.32160-1-e@80x24.org> References: <20190629195951.32160-1-e@80x24.org> List-Id: We'll be reusing requeue in other places to reduce trips to the kernel to retrieve "hot" descriptors. --- lib/PublicInbox/DS.pm | 14 ++++++++++++++ lib/PublicInbox/NNTP.pm | 22 ++++------------------ 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/lib/PublicInbox/DS.pm b/lib/PublicInbox/DS.pm index 28240843..9f245347 100644 --- a/lib/PublicInbox/DS.pm +++ b/lib/PublicInbox/DS.pm @@ -37,6 +37,8 @@ use Errno qw(EAGAIN EINVAL EEXIST); use Carp qw(croak confess carp); require File::Spec; +my $nextt; # timer for next_tick +my $nextq = []; # queue for next_tick our ( %DescriptorMap, # fd (num) -> PublicInbox::DS object $Epoll, # Global epoll fd (or DSKQXS ref) @@ -594,6 +596,18 @@ sub shutdn ($) { } } +sub next_tick () { + $nextt = undef; + my $q = $nextq; + $nextq = []; + $_->event_step for @$q; +} + +sub requeue ($) { + push @$nextq, $_[0]; + $nextt ||= PublicInbox::EvCleanup::asap(*next_tick); +} + package PublicInbox::DS::Timer; # [$abs_float_firetime, $coderef]; sub cancel { diff --git a/lib/PublicInbox/NNTP.pm b/lib/PublicInbox/NNTP.pm index 0a053627..83970309 100644 --- a/lib/PublicInbox/NNTP.pm +++ b/lib/PublicInbox/NNTP.pm @@ -38,20 +38,6 @@ my %DISABLED; # = map { $_ => 1 } qw(xover list_overview_fmt newnews xhdr); my $EXPMAP; # fd -> [ idle_time, $self ] my $expt; our $EXPTIME = 180; # 3 minutes -my $nextt; - -my $nextq = []; -sub next_tick () { - $nextt = undef; - my $q = $nextq; - $nextq = []; - event_step($_) for @$q; -} - -sub requeue ($) { - push @$nextq, $_[0]; - $nextt ||= PublicInbox::EvCleanup::asap(*next_tick); -} sub update_idle_time ($) { my ($self) = @_; @@ -655,12 +641,12 @@ sub long_response ($$) { push @$wbuf, $long_cb; # wbuf may be populated by $cb, no need to rearm if so: - requeue($self) if scalar(@$wbuf) == 1; + $self->requeue if scalar(@$wbuf) == 1; } else { # all done! $long_cb = undef; res($self, '.'); out($self, " deferred[$fd] done - %0.6f", now() - $t0); - requeue($self) unless $self->{wbuf}; + $self->requeue unless $self->{wbuf}; } }; $self->write($long_cb); # kick off! @@ -915,7 +901,7 @@ sub cmd_starttls ($) { return '580 can not initiate TLS negotiation'; res($self, '382 Continue with TLS negotiation'); $self->{sock} = IO::Socket::SSL->start_SSL($sock, %$opt); - requeue($self) if PublicInbox::DS::accept_tls_step($self); + $self->requeue if PublicInbox::DS::accept_tls_step($self); undef; } @@ -990,7 +976,7 @@ sub event_step { # maybe there's more pipelined data, or we'll have # to register it for socket-readiness notifications - requeue($self) unless $self->{wbuf}; + $self->requeue unless $self->{wbuf}; } sub not_idle_long ($$) { -- EW