From: Eric Wong <e@80x24.org>
Date: Mon, 24 Jun 2019 02:52:49 +0000 (+0000)
Subject: ds: flush_write runs ->write callbacks even if closed
X-Git-Tag: v1.2.0~156^2~11
X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=3667c96f84a39c8fbfaf4cef37f58a9db06bb4b3;p=public-inbox.git

ds: flush_write runs ->write callbacks even if closed

We may need to rely on cleanup code running in enqueued
callbacks, so ensure we call it when flush_write happens.
---

diff --git a/lib/PublicInbox/DS.pm b/lib/PublicInbox/DS.pm
index 8f77ce24..d38e2d20 100644
--- a/lib/PublicInbox/DS.pm
+++ b/lib/PublicInbox/DS.pm
@@ -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) {