]> Sergey Matveev's repositories - public-inbox.git/commitdiff
ds: move requeue logic over from NNTP
authorEric Wong <e@80x24.org>
Thu, 27 Jun 2019 21:21:03 +0000 (21:21 +0000)
committerEric Wong <e@80x24.org>
Sat, 29 Jun 2019 19:59:00 +0000 (19:59 +0000)
We'll be reusing requeue in other places to reduce trips to
the kernel to retrieve "hot" descriptors.

lib/PublicInbox/DS.pm
lib/PublicInbox/NNTP.pm

index 2824084334e4bc026b1a327ba483feb5238b26c8..9f24534788a4e26d9e43ad54b4547c27e253c964 100644 (file)
@@ -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 {
index 0a05362757eaf62505dc09208ade24cddfd53f7e..839703093d7a9c2e36007866a2bf3908c6b52260 100644 (file)
@@ -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 ($$) {