about summary refs log tree commit homepage
path: root/lib/PublicInbox/DS.pm
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2022-07-23 04:41:50 +0000
committerEric Wong <e@80x24.org>2022-07-23 14:22:30 +0000
commita5e39d0e4e2d9b7ad937e8dd9af726d96eec6126 (patch)
tree8393c45ca0e81e53f2d826dfea920ef24ac8532e /lib/PublicInbox/DS.pm
parent0f432191082f889c4296351e356c4abaf8cc7a28 (diff)
downloadpublic-inbox-a5e39d0e4e2d9b7ad937e8dd9af726d96eec6126.tar.gz
It's the same subroutine everywhere.
Diffstat (limited to 'lib/PublicInbox/DS.pm')
-rw-r--r--lib/PublicInbox/DS.pm14
1 files changed, 14 insertions, 0 deletions
diff --git a/lib/PublicInbox/DS.pm b/lib/PublicInbox/DS.pm
index daef9d89..f0181b54 100644
--- a/lib/PublicInbox/DS.pm
+++ b/lib/PublicInbox/DS.pm
@@ -650,6 +650,20 @@ sub shutdn ($) {
 
 sub zflush {} # overridden by NNTPdeflate and IMAPdeflate
 
+sub requeue_once {
+        my ($self) = @_;
+        # COMPRESS users all share the same DEFLATE context.
+        # Flush it here to ensure clients don't see
+        # each other's data
+        $self->zflush;
+
+        # no recursion, schedule another call ASAP,
+        # but only after all pending writes are done.
+        # autovivify wbuf.  wbuf may be populated by $cb,
+        # no need to rearm if so: (push returns new size of array)
+        requeue($self) if push(@{$self->{wbuf}}, $self->can('long_step')) == 1;
+}
+
 sub dwaitpid ($;$$) {
         my ($pid, $cb, $arg) = @_;
         if ($in_loop) {