]> Sergey Matveev's repositories - public-inbox.git/commitdiff
ds: ->write must not clobber empty wbuf array
authorEric Wong <e@80x24.org>
Mon, 24 Jun 2019 18:18:18 +0000 (18:18 +0000)
committerEric Wong <e@80x24.org>
Mon, 24 Jun 2019 18:26:04 +0000 (18:26 +0000)
We need to account for ->write(CODE) calls doing ->write(SCALARREF),
otherwise flush_write may see the wrong ->{wbuf} field.

lib/PublicInbox/DS.pm

index 4947192f8e4d604f1c1563595890326b8b31b174..08f4e9e8a3389937d9dde1fad0d1e50d687e4202 100644 (file)
@@ -505,7 +505,10 @@ sub write {
             return $self->close;
         }
         my $tmpio = tmpio($self, $bref, $written) or return 0;
-        $self->{wbuf} = [ $tmpio ];
+
+        # wbuf may be an empty array if we're being called inside
+        # ->flush_write via CODE bref:
+        push @{$self->{wbuf} ||= []}, $tmpio;
         watch($self, EPOLLOUT|EPOLLONESHOT);
         return 0;
     }