about summary refs log tree commit homepage
path: root/lib/PublicInbox/Qspawn.pm
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2019-12-25 07:50:47 +0000
committerEric Wong <e@80x24.org>2019-12-26 10:48:19 +0000
commita7949988f7f8690c868d2150fe3000fcf6a6d5f4 (patch)
tree71c6782191d29573c4e2b025eb4b6d81deddd7ff /lib/PublicInbox/Qspawn.pm
parent3eba4cbd05b348622e772889b06a5994ba69d157 (diff)
downloadpublic-inbox-a7949988f7f8690c868d2150fe3000fcf6a6d5f4.tar.gz
Callers can supply an arg to parse_hdr, now, eliminating the
need for closures to capture local variables.
Diffstat (limited to 'lib/PublicInbox/Qspawn.pm')
-rw-r--r--lib/PublicInbox/Qspawn.pm7
1 files changed, 4 insertions, 3 deletions
diff --git a/lib/PublicInbox/Qspawn.pm b/lib/PublicInbox/Qspawn.pm
index d1a34bea..1a2b70e7 100644
--- a/lib/PublicInbox/Qspawn.pm
+++ b/lib/PublicInbox/Qspawn.pm
@@ -215,12 +215,13 @@ sub rd_hdr ($) {
         my $ret;
         my $total_rd = 0;
         my $hdr_buf = $self->{hdr_buf};
+        my ($ph_cb, $ph_arg) = @{$self->{parse_hdr}};
         do {
                 my $r = sysread($self->{rpipe}, $$hdr_buf, 4096,
                                 length($$hdr_buf));
                 if (defined($r)) {
                         $total_rd += $r;
-                        $ret = $self->{parse_hdr}->($total_rd, $hdr_buf);
+                        $ret = $ph_cb->($total_rd, $hdr_buf, $ph_arg);
                 } else {
                         # caller should notify us when it's ready:
                         return if $! == EAGAIN;
@@ -298,10 +299,10 @@ sub psgi_return_start { # may run later, much later...
 #              psgix.io.  3-element arrays means the body is available
 #              immediately (or streamed via ->getline (pull-based)).
 sub psgi_return {
-        my ($self, $env, $limiter, $parse_hdr) = @_;
+        my ($self, $env, $limiter, $parse_hdr, $hdr_arg) = @_;
         $self->{psgi_env} = $env;
         $self->{hdr_buf} = \(my $hdr_buf = '');
-        $self->{parse_hdr} = $parse_hdr;
+        $self->{parse_hdr} = [ $parse_hdr, $hdr_arg ];
         $limiter ||= $def_limiter ||= PublicInbox::Qspawn::Limiter->new(32);
 
         # the caller already captured the PSGI write callback from