From f947a355417328a96b1bbe43223cbae79fc10345 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Fri, 29 Apr 2016 03:32:20 +0000 Subject: http: improve error handling for aborted responses We need to abort connections properly if a response is prematurely truncated. This includes problems with serving static files, since a clumsy admin or broken FS could return truncated responses and inadvertently leave a client waiting (since the client saw "Content-Length" in the header and expected a certain length). --- lib/PublicInbox/HTTP.pm | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'lib/PublicInbox/HTTP.pm') 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 ''); -- cgit v1.2.3-24-ge0c7