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.pm9
1 files changed, 9 insertions, 0 deletions
diff --git a/lib/PublicInbox/HTTP.pm b/lib/PublicInbox/HTTP.pm
index c7fb954e..973da341 100644
--- a/lib/PublicInbox/HTTP.pm
+++ b/lib/PublicInbox/HTTP.pm
@@ -135,6 +135,9 @@ sub app_dispatch ($) {
         sysseek($env->{'psgi.input'}, 0, SEEK_SET) or
                         die "BUG: psgi.input seek failed: $!";
 
+        # note: NOT $self->{sock}, we want our close (+ Danga::Socket::close),
+        # to do proper cleanup:
+        $env->{'psgix.io'} = $self; # only for ->close
         my $res = Plack::Util::run_app($self->{httpd}->{app}, $env);
         eval {
                 if (ref($res) eq 'CODE') {
@@ -371,6 +374,12 @@ sub quit {
 sub event_hup { $_[0]->close }
 sub event_err { $_[0]->close }
 
+sub close {
+        my $self = shift;
+        $self->{env} = undef;
+        $self->SUPER::close(@_);
+}
+
 sub write ($$) : method {
         my PublicInbox::HTTP $self = $_[0];
         return 1 if (defined($_[1]) && ref($_[1]) eq '' && $_[1] eq '');