diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/PublicInbox/HTTPD/Async.pm | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/lib/PublicInbox/HTTPD/Async.pm b/lib/PublicInbox/HTTPD/Async.pm index 47ba27d2..b00e6370 100644 --- a/lib/PublicInbox/HTTPD/Async.pm +++ b/lib/PublicInbox/HTTPD/Async.pm @@ -10,6 +10,7 @@ use strict; use warnings; use base qw(Danga::Socket); use fields qw(cb cleanup); +use Scalar::Util qw(weaken); require PublicInbox::EvCleanup; sub new { @@ -25,11 +26,12 @@ sub new { sub async_pass { my ($self, $io, $fh, $bref) = @_; - my $restart_read = sub { $self->watch_read(1) }; # In case the client HTTP connection ($io) dies, it # will automatically close this ($self) object. $io->{forward} = $self; $fh->write($$bref); + weaken($self); + my $restart_read = sub { $self->watch_read(1) }; $self->{cb} = sub { my $r = sysread($self->{sock}, $$bref, 8192); if ($r) { |