diff options
Diffstat (limited to 'lib/PublicInbox/HTTP.pm')
-rw-r--r-- | lib/PublicInbox/HTTP.pm | 14 |
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; }; |