]> Sergey Matveev's repositories - public-inbox.git/commitdiff
ds|http|nntp: simplify {wbuf} population
authorEric Wong <e@yhbt.net>
Sun, 12 Jan 2020 21:17:51 +0000 (21:17 +0000)
committerEric Wong <e@yhbt.net>
Mon, 13 Jan 2020 23:21:25 +0000 (23:21 +0000)
We can rely on autovification to turn `undef' value of {wbuf}
into an arrayref.

Furthermore, "push" returns the (new) size of the array since at
least Perl 5.0 (I didn't look further back), so we can use that
return value instead of calling "scalar" again.

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

index d0aefec0f70bff09789ce645b8f4b83fd03d6a28..f7c8ad2ba085d2b1654b596e6e4393e5cf40460e 100644 (file)
@@ -31,7 +31,7 @@ use PublicInbox::Tmpfile;
 
 use fields ('sock',              # underlying socket
             'rbuf',              # scalarref, usually undef
-            'wbuf',              # arrayref of coderefs or GLOB refs
+            'wbuf', # arrayref of coderefs or GLOB refs (autovivified)
             'wbuf_off',  # offset into first element of wbuf to start writing at
             );
 
@@ -555,7 +555,7 @@ sub write {
 
         # wbuf may be an empty array if we're being called inside
         # ->flush_write via CODE bref:
-        push @{$self->{wbuf} ||= []}, $tmpio;
+        push @{$self->{wbuf}}, $tmpio; # autovivifies
         return 0;
     }
 }
@@ -575,8 +575,7 @@ sub msg_more ($$) {
             return 1 if $nlen == 0; # all done!
             # queue up the unwritten substring:
             my $tmpio = tmpio($self, \($_[1]), $n) or return 0;
-            $self->{wbuf} //= $wbuf //= [];
-            push @$wbuf, $tmpio;
+            push @{$self->{wbuf}}, $tmpio; # autovivifies
             epwait($sock, EPOLLOUT|EPOLLONESHOT);
             return 0;
         }
@@ -599,7 +598,7 @@ sub accept_tls_step ($) {
     return 1 if $sock->accept_SSL;
     return $self->close if $! != EAGAIN;
     epwait($sock, PublicInbox::TLS::epollbit() | EPOLLONESHOT);
-    unshift @{$self->{wbuf} ||= []}, \&accept_tls_step;
+    unshift(@{$self->{wbuf}}, \&accept_tls_step); # autovivifies
     0;
 }
 
@@ -610,7 +609,7 @@ sub shutdn_tls_step ($) {
     return $self->close if $sock->stop_SSL(SSL_fast_shutdown => 1);
     return $self->close if $! != EAGAIN;
     epwait($sock, PublicInbox::TLS::epollbit() | EPOLLONESHOT);
-    unshift @{$self->{wbuf} ||= []}, \&shutdn_tls_step;
+    unshift(@{$self->{wbuf}}, \&shutdn_tls_step); # autovivifies
     0;
 }
 
index 071251c632e394302097538bf86ed881473a6fe5..325371535995ce0a343277bd6fcc603f2cc9493b 100644 (file)
@@ -280,12 +280,12 @@ sub getline_pull {
                }
 
                if ($self->{sock}) {
-                       my $wbuf = $self->{wbuf} //= [];
-                       push @$wbuf, \&getline_pull;
+                       # autovivify wbuf
+                       my $new_size = push(@{$self->{wbuf}}, \&getline_pull);
 
                        # wbuf may be populated by {chunked,identity}_write()
                        # above, no need to rearm if so:
-                       $self->requeue if scalar(@$wbuf) == 1;
+                       $self->requeue if $new_size == 1;
                        return; # likely
                }
        } elsif ($@) {
index 9f0dfaaa083368739b72fd581a6225365059b6e9..35729f003daecc99b12826df25456815b21f0c2e 100644 (file)
@@ -616,20 +616,19 @@ sub long_step {
                # each other's data
                $self->zflush;
 
-               # no recursion, schedule another call ASAP
-               # but only after all pending writes are done
-               my $wbuf = $self->{wbuf} ||= [];
-               push @$wbuf, \&long_step;
+               # no recursion, schedule another call ASAP, but only after
+               # all pending writes are done.  autovivify wbuf:
+               my $new_size = push(@{$self->{wbuf}}, \&long_step);
 
                # wbuf may be populated by $cb, no need to rearm if so:
-               $self->requeue if scalar(@$wbuf) == 1;
+               $self->requeue if $new_size == 1;
        } else { # all done!
                delete $self->{long_cb};
                res($self, '.');
                my $elapsed = now() - $t0;
                my $fd = fileno($self->{sock});
                out($self, " deferred[$fd] done - %0.6f", $elapsed);
-               my $wbuf = $self->{wbuf};
+               my $wbuf = $self->{wbuf}; # do NOT autovivify
                $self->requeue unless $wbuf && @$wbuf;
        }
 }