From aa4e04c633ee857cb372d7e55c545d7a7b29d2eb Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Fri, 27 May 2016 07:23:18 +0000 Subject: httpd/async: do not needlessly weaken The restart_read callback has no chance of circular reference, and weakening $self before we create it can cause $self to be undefined inside the callback (seen during stress testing). Fixes: 395406118cb2 ("httpd/async: prevent circular reference") --- lib/PublicInbox/HTTPD/Async.pm | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'lib/PublicInbox/HTTPD/Async.pm') diff --git a/lib/PublicInbox/HTTPD/Async.pm b/lib/PublicInbox/HTTPD/Async.pm index b00e6370..add07ce4 100644 --- a/lib/PublicInbox/HTTPD/Async.pm +++ b/lib/PublicInbox/HTTPD/Async.pm @@ -24,14 +24,19 @@ sub new { $self; } +sub restart_read_cb ($) { + my ($self) = @_; + sub { $self->watch_read(1) } +} + sub async_pass { my ($self, $io, $fh, $bref) = @_; # In case the client HTTP connection ($io) dies, it # will automatically close this ($self) object. $io->{forward} = $self; $fh->write($$bref); + my $restart_read = restart_read_cb($self); weaken($self); - my $restart_read = sub { $self->watch_read(1) }; $self->{cb} = sub { my $r = sysread($self->{sock}, $$bref, 8192); if ($r) { -- cgit v1.2.3-24-ge0c7