about summary refs log tree commit homepage
diff options
context:
space:
mode:
-rw-r--r--lib/PublicInbox/DS.pm11
-rw-r--r--lib/PublicInbox/HTTP.pm6
-rw-r--r--lib/PublicInbox/NNTP.pm11
3 files changed, 13 insertions, 15 deletions
diff --git a/lib/PublicInbox/DS.pm b/lib/PublicInbox/DS.pm
index d0aefec0..f7c8ad2b 100644
--- a/lib/PublicInbox/DS.pm
+++ b/lib/PublicInbox/DS.pm
@@ -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;
 }
 
diff --git a/lib/PublicInbox/HTTP.pm b/lib/PublicInbox/HTTP.pm
index 071251c6..32537153 100644
--- a/lib/PublicInbox/HTTP.pm
+++ b/lib/PublicInbox/HTTP.pm
@@ -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 ($@) {
diff --git a/lib/PublicInbox/NNTP.pm b/lib/PublicInbox/NNTP.pm
index 9f0dfaaa..35729f00 100644
--- a/lib/PublicInbox/NNTP.pm
+++ b/lib/PublicInbox/NNTP.pm
@@ -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;
         }
 }