about summary refs log tree commit homepage
path: root/lib/PublicInbox/HTTP.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/PublicInbox/HTTP.pm')
-rw-r--r--lib/PublicInbox/HTTP.pm14
1 files changed, 14 insertions, 0 deletions
diff --git a/lib/PublicInbox/HTTP.pm b/lib/PublicInbox/HTTP.pm
index bbcb0898..1ef3fb31 100644
--- a/lib/PublicInbox/HTTP.pm
+++ b/lib/PublicInbox/HTTP.pm
@@ -24,6 +24,15 @@ use constant {
         CHUNK_MAX_HDR => 256,
 };
 
+# FIXME: duplicated code with NNTP.pm
+my $WEAKEN = {}; # string(inbox) -> inbox
+my $WEAKTIMER;
+sub weaken_task () {
+        $WEAKTIMER = undef;
+        $_->weaken_all for values %$WEAKEN;
+        $WEAKEN = {};
+}
+
 # Use the same configuration parameter as git since this is primarily
 # a slow-client sponge for git-http-backend
 # TODO: support per-respository http.maxRequestBuffer somehow...
@@ -198,6 +207,11 @@ sub response_write {
                 } else {
                         $self->write(sub { $self->close });
                 }
+                if (my $obj = $env->{'pi-httpd.inbox'}) {
+                        # grace period for reaping resources
+                        $WEAKEN->{"$obj"} = $obj;
+                        $WEAKTIMER ||= Danga::Socket->AddTimer(60, *weaken_task);
+                }
                 $self->{env} = undef;
         };