From 271301a493f5418ddf5065d412811fde0a68e984 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sun, 19 Jun 2016 06:32:41 +0000 Subject: http: avoid recursion when hitting write count limit Use the EvCleanup::asap handler to reschedule our writes after yielding to other clients. --- lib/PublicInbox/HTTP.pm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'lib/PublicInbox') diff --git a/lib/PublicInbox/HTTP.pm b/lib/PublicInbox/HTTP.pm index 6df1c3fc..e0ed2d15 100644 --- a/lib/PublicInbox/HTTP.pm +++ b/lib/PublicInbox/HTTP.pm @@ -271,9 +271,12 @@ sub getline_response { while ($forward && defined(my $buf = $forward->getline)) { $write->($buf); last if $self->{closed}; - if ((--$n) <= 0 || $self->{write_buf_size}) { + if ($self->{write_buf_size}) { $self->write($self->{pull}); return; + } elsif ((--$n) <= 0) { + PublicInbox::EvCleanup::asap($self->{pull}); + return; } } $self->{forward} = $self->{pull} = undef; -- cgit v1.2.3-24-ge0c7