about summary refs log tree commit homepage
path: root/lib/PublicInbox/DS.pm
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2023-10-04 03:49:14 +0000
committerEric Wong <e@80x24.org>2023-10-04 17:46:30 +0000
commit2f946a02bc324612febdfe31604b79e0196a215f (patch)
treea225827b35718f40cd0d6c50d584895e211a5ae1 /lib/PublicInbox/DS.pm
parent1cbad18d329faad67c85f4d56f79afc80a2c80c4 (diff)
downloadpublic-inbox-2f946a02bc324612febdfe31604b79e0196a215f.tar.gz
It's shared by both by lei and public-facing daemons in using
the ->busy callback.
Diffstat (limited to 'lib/PublicInbox/DS.pm')
-rw-r--r--lib/PublicInbox/DS.pm10
1 files changed, 10 insertions, 0 deletions
diff --git a/lib/PublicInbox/DS.pm b/lib/PublicInbox/DS.pm
index c476311b..ecfb581d 100644
--- a/lib/PublicInbox/DS.pm
+++ b/lib/PublicInbox/DS.pm
@@ -233,6 +233,16 @@ sub enqueue_reap () { $reap_armed //= requeue(\&reap_pids) }
 
 sub in_loop () { $in_loop }
 
+# use inside @post_loop_do, returns number of busy clients
+sub close_non_busy () {
+        my $n = 0;
+        for my $s (values %DescriptorMap) {
+                # close as much as possible, early as possible
+                ($s->busy ? ++$n : $s->close) if $s->can('busy');
+        }
+        $n;
+}
+
 # Internal function: run the post-event callback, send read events
 # for pushed-back data, and close pending connections.  returns 1
 # if event loop should continue, or 0 to shut it all down.