From: Eric Wong Date: Fri, 27 May 2016 07:23:18 +0000 (+0000) Subject: httpd/async: do not needlessly weaken X-Git-Tag: v1.0.0~488 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=aa4e04c633ee857cb372d7e55c545d7a7b29d2eb;hp=79e11eea11dd561301a05c42ba824a7d352bd398;p=public-inbox.git 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") --- 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) {