diff options
Diffstat (limited to 'lib/yahns/req_res.rb')
-rw-r--r-- | lib/yahns/req_res.rb | 25 |
1 files changed, 6 insertions, 19 deletions
diff --git a/lib/yahns/req_res.rb b/lib/yahns/req_res.rb index f585bd9..9bb8f35 100644 --- a/lib/yahns/req_res.rb +++ b/lib/yahns/req_res.rb @@ -7,8 +7,7 @@ require 'kcar' # gem install kcar require 'kgio' class Yahns::ReqRes < Kgio::Socket # :nodoc: - attr_writer :resbuf - attr_writer :paused + attr_accessor :resbuf attr_accessor :proxy_trailers attr_accessor :alive attr_reader :proxy_pass @@ -16,23 +15,11 @@ class Yahns::ReqRes < Kgio::Socket # :nodoc: def req_start(c, req, input, chunked, proxy_pass) @hdr = @resbuf = nil @yahns_client = c - @paused = false @rrstate = input ? [ req, input, chunked ] : req @proxy_pass = proxy_pass Thread.current[:yahns_queue].queue_add(self, Yahns::Queue::QEV_WR) end - def close - if @paused # called by wbuf_close_common as @body.close - @paused = false - # we must cleanup and set yahns_client state before queue_mod below: - @yahns_client.hijack_cleanup - Thread.current[:yahns_queue].queue_mod(self, Yahns::Queue::QEV_RD) - else - super - end - end - def yahns_step # yahns event loop entry point c = @yahns_client case req = @rrstate @@ -55,7 +42,7 @@ class Yahns::ReqRes < Kgio::Socket # :nodoc: # continue looping in middle "case @resbuf" loop when :wait_readable return rv # spurious wakeup - when nil then return c.proxy_err_response(502, self, nil, nil) + when nil then return c.proxy_err_response(502, self, nil) end # NOT looping here when String # continue reading trickled response headers from upstream @@ -63,15 +50,15 @@ class Yahns::ReqRes < Kgio::Socket # :nodoc: case rv = kgio_tryread(0x2000, buf) when String then res = req.headers(@hdr, resbuf << rv) and break when :wait_readable then return rv - when nil then return c.proxy_err_response(502, self, nil, nil) + when nil then return c.proxy_err_response(502, self, nil) end while true + @resbuf = false return c.proxy_response_start(res, resbuf, req, self) when Yahns::WbufCommon # streaming/buffering the response body - # we assign wbuf for rescue below: - return c.proxy_response_finish(req, wbuf = resbuf, self) + return c.proxy_response_finish(req, self) end while true # case @resbuf @@ -87,7 +74,7 @@ class Yahns::ReqRes < Kgio::Socket # :nodoc: when Errno::ECONNREFUSED, Errno::ECONNRESET, Errno::EPIPE e.set_backtrace([]) end - c.proxy_err_response(502, self, e, wbuf) + c.proxy_err_response(502, self, e) end def send_req_body_chunk(buf) |