]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/HTTP.pm
wwwstream: prioritize search in top title bar
[public-inbox.git] / lib / PublicInbox / HTTP.pm
index e19c592c99612ae29960676e5112166d5f5642eb..fa34b443f579b45c37a72b8678e64978062fe6a1 100644 (file)
@@ -25,15 +25,6 @@ use constant {
        CHUNK_MAX_HDR => 256,
 };
 
-# FIXME: duplicated code with NNTP.pm, layering violation
-my $WEAKEN = {}; # string(inbox) -> inbox
-my $weakt;
-sub weaken_task () {
-       $weakt = undef;
-       $_->weaken_all for values %$WEAKEN;
-       $WEAKEN = {};
-}
-
 my $pipelineq = [];
 my $pipet;
 sub process_pipelineq () {
@@ -107,7 +98,7 @@ sub rbuf_process {
        $self->{rbuf} = substr($self->{rbuf}, $r);
 
        my $len = input_prepare($self, \%env);
-       defined $len or return write_err($self); # EMFILE/ENFILE
+       defined $len or return write_err($self, undef); # EMFILE/ENFILE
 
        $len ? event_read_input($self) : app_dispatch($self);
 }
@@ -127,7 +118,7 @@ sub event_read_input ($) {
        while ($len > 0) {
                if ($$rbuf ne '') {
                        my $w = write_in_full($input, $rbuf, $len);
-                       return write_err($self) unless $w;
+                       return write_err($self, $len) unless $w;
                        $len -= $w;
                        die "BUG: $len < 0 (w=$w)" if $len < 0;
                        if ($len == 0) { # next request may be pipelined
@@ -252,13 +243,6 @@ sub response_done ($$) {
        $self->{env} = undef;
        $self->write("0\r\n\r\n") if $alive == 2;
        $self->write(sub { $alive ? next_request($self) : $self->close });
-
-       # FIXME: layering violation
-       if (my $obj = $env->{'pi-httpd.inbox'}) {
-               # grace period for reaping resources
-               $WEAKEN->{"$obj"} = $obj;
-               PublicInbox::EvCleanup::later(*weaken_task);
-       }
 }
 
 sub getline_response {
@@ -348,9 +332,10 @@ sub input_prepare {
 sub env_chunked { ($_[0]->{HTTP_TRANSFER_ENCODING} || '') =~ /\bchunked\b/i }
 
 sub write_err {
-       my ($self) = @_;
+       my ($self, $len) = @_;
        my $err = $self->{httpd}->{env}->{'psgi.errors'};
        my $msg = $! || '(zero write)';
+       $msg .= " ($len bytes remaining)" if defined $len;
        $err->print("error buffering to input: $msg\n");
        quit($self, 500);
 }
@@ -426,7 +411,7 @@ sub event_read_input_chunked { # unlikely...
                until ($len <= 0) {
                        if ($$rbuf ne '') {
                                my $w = write_in_full($input, $rbuf, $len);
-                               return write_err($self) unless $w;
+                               return write_err($self, "$len chunk") if !$w;
                                $len -= $w;
                                if ($len == 0) {
                                        # we may have leftover data to parse