diff options
-rw-r--r-- | lib/yahns/http_response.rb | 6 | ||||
-rw-r--r-- | lib/yahns/max_body/wrapper.rb | 2 | ||||
-rw-r--r-- | lib/yahns/tee_input.rb | 1 |
3 files changed, 7 insertions, 2 deletions
diff --git a/lib/yahns/http_response.rb b/lib/yahns/http_response.rb index 292fab7..4b36db2 100644 --- a/lib/yahns/http_response.rb +++ b/lib/yahns/http_response.rb @@ -162,11 +162,13 @@ module Yahns::HttpResponse # :nodoc: : "Connection: close\r\n\r\n".freeze) case rv = kgio_syssend(buf, flags) when nil # all done, likely + buf.clear + buf = nil # recycle any memory we used ASAP break when String flags = MSG_DONTWAIT - buf = rv # hope the skb grows - when :wait_writable, :wait_readable + buf = rv # unlikely, hope the skb grows + when :wait_writable, :wait_readable # unlikely if k.output_buffering alive = hijack ? hijack : alive rv = response_header_blocked(rv, buf, body, alive, offset, count) diff --git a/lib/yahns/max_body/wrapper.rb b/lib/yahns/max_body/wrapper.rb index b75c3b6..b6ca1a3 100644 --- a/lib/yahns/max_body/wrapper.rb +++ b/lib/yahns/max_body/wrapper.rb @@ -48,6 +48,7 @@ class Yahns::MaxBody::Wrapper # :nodoc: if tmp = checked_read(16384) @rbuf << tmp + tmp.clear elsif @rbuf.empty? # EOF return nil else # EOF, return whatever is left @@ -69,6 +70,7 @@ class Yahns::MaxBody::Wrapper # :nodoc: while checked_read(16384, tmp) rv << tmp end + tmp.clear rv end end diff --git a/lib/yahns/tee_input.rb b/lib/yahns/tee_input.rb index 55b1604..93ec148 100644 --- a/lib/yahns/tee_input.rb +++ b/lib/yahns/tee_input.rb @@ -100,6 +100,7 @@ class Yahns::TeeInput < Yahns::StreamInput # :nodoc: junk = ''.dup rsize = __rsize nil while read(rsize, junk) + junk.clear end def tee(buffer) |