]> Sergey Matveev's repositories - public-inbox.git/commitdiff
ds: flush_write runs ->write callbacks even if closed
authorEric Wong <e@80x24.org>
Mon, 24 Jun 2019 02:52:49 +0000 (02:52 +0000)
committerEric Wong <e@80x24.org>
Mon, 24 Jun 2019 05:26:27 +0000 (05:26 +0000)
We may need to rely on cleanup code running in enqueued
callbacks, so ensure we call it when flush_write happens.

lib/PublicInbox/DS.pm

index 8f77ce24b20ed5171f30720d88c83469fe2b28d7..d38e2d20123d4aae61cd560555e14cba2dddb9f4 100644 (file)
@@ -442,13 +442,13 @@ sub psendfile ($$$) {
 sub flush_write ($) {
     my ($self) = @_;
     my $wbuf = $self->{wbuf} or return 1;
-    my $sock = $self->{sock} or return 1;
+    my $sock = $self->{sock};
 
 next_buf:
     while (my $bref = $wbuf->[0]) {
         if (ref($bref) ne 'CODE') {
             my $off = delete($self->{wbuf_off}) // 0;
-            while (1) {
+            while ($sock) {
                 my $w = psendfile($sock, $bref, \$off);
                 if (defined $w) {
                     if ($w == 0) {