use HTTP::Status qw(status_message);
use HTTP::Date qw(time2str);
use IO::Handle;
-require PublicInbox::EvCleanup;
use PublicInbox::DS qw(msg_more);
use PublicInbox::Syscall qw(EPOLLIN EPOLLONESHOT);
+use PublicInbox::Tmpfile;
use constant {
CHUNK_START => -1, # [a-f0-9]+\r\n
CHUNK_END => -2, # \r\n
sub response_done_cb ($$) {
my ($self, $alive) = @_;
sub {
- my $env = delete $self->{env};
+ delete $self->{env}; # we're no longer busy
$self->write(\"0\r\n\r\n") if $alive == 2;
$self->write($alive ? \&next_request : \&close);
}
}
sub input_tmpfile ($) {
- open($_[0], '+>', undef);
- $_[0]->autoflush(1);
+ my $input = tmpfile('http.input', $_[0]->{sock}) or return;
+ $input->autoflush(1);
+ $input;
}
sub input_prepare {
quit($self, 413);
return;
}
- input_tmpfile($input);
+ $input = input_tmpfile($self);
} elsif (env_chunked($env)) {
$len = CHUNK_START;
- input_tmpfile($input);
+ $input = input_tmpfile($self);
} else {
$input = $null_io;
}
sub close {
my $self = $_[0];
- if (my $env = delete $self->{env}) {
- delete $env->{'psgix.io'}; # prevent circular references
- }
+ delete $self->{env}; # prevent circular references
if (my $forward = delete $self->{forward}) {
eval { $forward->close };
err($self, "forward ->close error: $@") if $@;