]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/NNTP.pm
nntp: reduce allocations for greeting
[public-inbox.git] / lib / PublicInbox / NNTP.pm
index 8840adbb8a807aa2fb0a2741675a0d137b232320..12ce4e687f574e655e9201fda255552f7241ebb1 100644 (file)
@@ -74,11 +74,17 @@ sub expire_old () {
        my $exp = $EXPTIME;
        my $old = $now - $exp;
        my $nr = 0;
+       my $closed = 0;
        my %new;
        while (my ($fd, $v) = each %$EXPMAP) {
                my ($idle_time, $nntp) = @$v;
                if ($idle_time < $old) {
-                       $nntp->close; # idempotent
+                       if ($nntp->shutdn) {
+                               $closed++;
+                       } else {
+                               ++$nr;
+                               $new{$fd} = $v;
+                       }
                } else {
                        ++$nr;
                        $new{$fd} = $v;
@@ -91,10 +97,12 @@ sub expire_old () {
                $expt = undef;
                # noop to kick outselves out of the loop ASAP so descriptors
                # really get closed
-               PublicInbox::EvCleanup::asap(sub {});
+               PublicInbox::EvCleanup::asap(sub {}) if $closed;
        }
 }
 
+sub greet ($) { $_[0]->write($_[0]->{nntpd}->{greet}) };
+
 sub new ($$$) {
        my ($class, $sock, $nntpd) = @_;
        my $self = fields::new($class);
@@ -107,9 +115,7 @@ sub new ($$$) {
        }
        $self->SUPER::new($sock, $ev);
        $self->{nntpd} = $nntpd;
-       my $greet = "201 $nntpd->{servername} ready - post via email\r\n";
-       open my $fh, '<:scalar',  \$greet or die "open :scalar: $!";
-       push @$wbuf, $fh;
+       push @$wbuf, \&greet;
        $self->{wbuf} = $wbuf;
        $self->{rbuf} = '';
        update_idle_time($self);
@@ -410,7 +416,7 @@ sub cmd_post ($) {
 sub cmd_quit ($) {
        my ($self) = @_;
        res($self, '205 closing connection - goodbye!');
-       $self->close;
+       $self->shutdn;
        undef;
 }