about summary refs log tree commit homepage
path: root/lib/PublicInbox/HTTPD
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2019-06-28 19:26:56 +0000
committerEric Wong <e@80x24.org>2019-06-29 19:59:00 +0000
commit8922459f0fa7265cfe3dee21f56895aeeb560d47 (patch)
tree6e4669f9a18efb95db84fe06e4dd3b164d75f085 /lib/PublicInbox/HTTPD
parent21a539a2df0cbbc929aecec88f9fd6879e20f466 (diff)
downloadpublic-inbox-8922459f0fa7265cfe3dee21f56895aeeb560d47.tar.gz
Linux pipes default to 65536 bytes in size, and we want to read
external processes as fast as possible now that we don't use
Danga::Socket or buffer to heap.

However, drop the buffer ASAP if we need to wait on anything;
since idle buffers can be idle for eons.  This lets other
execution contexts can reuse that memory right away.
Diffstat (limited to 'lib/PublicInbox/HTTPD')
-rw-r--r--lib/PublicInbox/HTTPD/Async.pm11
1 files changed, 6 insertions, 5 deletions
diff --git a/lib/PublicInbox/HTTPD/Async.pm b/lib/PublicInbox/HTTPD/Async.pm
index 1ffc2565..584db8d4 100644
--- a/lib/PublicInbox/HTTPD/Async.pm
+++ b/lib/PublicInbox/HTTPD/Async.pm
@@ -33,13 +33,13 @@ sub new {
         $self;
 }
 
-sub main_cb ($$$) {
-        my ($http, $fh, $bref) = @_;
+sub main_cb ($$) {
+        my ($http, $fh) = @_;
         sub {
                 my ($self) = @_;
-                my $r = sysread($self->{sock}, $$bref, 8192);
+                my $r = sysread($self->{sock}, my $buf, 65536);
                 if ($r) {
-                        $fh->write($$bref); # may call $http->close
+                        $fh->write($buf); # may call $http->close
                         if ($http->{sock}) { # !closed
                                 $self->requeue;
                                 # let other clients get some work done, too
@@ -64,7 +64,8 @@ sub async_pass {
         # will automatically close this ($self) object.
         $http->{forward} = $self;
         $fh->write($$bref); # PublicInbox:HTTP::{chunked,identity}_wcb
-        my $cb = $self->{cb} = main_cb($http, $fh, $bref);
+        $$bref = undef; # we're done with this
+        my $cb = $self->{cb} = main_cb($http, $fh);
         $cb->($self); # either hit EAGAIN or ->requeue to keep EPOLLET happy
 }