diff options
author | Eric Wong <e@80x24.org> | 2019-12-25 07:50:47 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2019-12-26 10:48:19 +0000 |
commit | a7949988f7f8690c868d2150fe3000fcf6a6d5f4 (patch) | |
tree | 71c6782191d29573c4e2b025eb4b6d81deddd7ff /lib/PublicInbox/Qspawn.pm | |
parent | 3eba4cbd05b348622e772889b06a5994ba69d157 (diff) | |
download | public-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.pm | 7 |
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 |