From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-2.9 required=3.0 tests=ALL_TRUSTED,AWL,BAYES_00 shortcircuit=no autolearn=unavailable version=3.3.2 X-Original-To: spew@80x24.org Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id 338FF200DC; Tue, 14 Apr 2015 20:36:14 +0000 (UTC) Date: Tue, 14 Apr 2015 20:36:14 +0000 From: Eric Wong To: spew@80x24.org Subject: [PATCH] experimental test to disable buffer sharing Message-ID: <20150414203614.GA18061@dcvr.yhbt.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline List-Id: multithreading is tricky... --- lib/yahns/proxy_http_response.rb | 8 ++++---- lib/yahns/proxy_pass.rb | 12 ++---------- 2 files changed, 6 insertions(+), 14 deletions(-) diff --git a/lib/yahns/proxy_http_response.rb b/lib/yahns/proxy_http_response.rb index af8d8cc..632dfe6 100644 --- a/lib/yahns/proxy_http_response.rb +++ b/lib/yahns/proxy_http_response.rb @@ -88,7 +88,7 @@ module Yahns::HttpResponse # :nodoc: break # keep buffering as much as possible end while true - rbuf = Thread.current[:yahns_rbuf] + rbuf = '' tip = tip.empty? ? [] : [ tip ] if have_body @@ -123,7 +123,7 @@ module Yahns::HttpResponse # :nodoc: buf = tmp req_res.proxy_trailers = [ buf, tlr = [] ] - rbuf = Thread.current[:yahns_rbuf] = '' + rbuf = '' until kcar.trailers(tlr, buf) case rv = req_res.kgio_tryread(0x2000, rbuf) when String @@ -165,7 +165,7 @@ module Yahns::HttpResponse # :nodoc: end def proxy_response_finish(kcar, wbuf, req_res) - rbuf = Thread.current[:yahns_rbuf] + rbuf = '' if len = kcar.body_bytes_left case tmp = req_res.kgio_tryread(0x2000, rbuf) @@ -193,7 +193,7 @@ module Yahns::HttpResponse # :nodoc: return :wait_readable # self remains in :ignore, wait on upstream end until kcar.body_eof? req_res.proxy_trailers = [ tmp, [] ] # onto trailers! - rbuf = Thread.current[:yahns_rbuf] = '' + rbuf = '' end buf, tlr = *req_res.proxy_trailers diff --git a/lib/yahns/proxy_pass.rb b/lib/yahns/proxy_pass.rb index e86e9c9..f6021d4 100644 --- a/lib/yahns/proxy_pass.rb +++ b/lib/yahns/proxy_pass.rb @@ -21,17 +21,11 @@ class Yahns::ProxyPass # :nodoc: Thread.current[:yahns_queue].queue_add(self, Yahns::Queue::QEV_WR) end - # we must reinitialize the thread-local rbuf if it may get beyond the - # current thread - def detach_rbuf! - Thread.current[:yahns_rbuf] = '' - end - def yahns_step # yahns event loop entry point c = @yahns_client case req = @rrstate when Kcar::Parser # reading response... - buf = Thread.current[:yahns_rbuf] + buf = '' case resbuf = @resbuf # where are we at the response? when nil # common case, catch the response header in a single read @@ -41,8 +35,8 @@ class Yahns::ProxyPass # :nodoc: if res = req.headers(@hdr = [], rv) return c.proxy_response_start(res, rv, req, self) else # ugh, big headers or tricked response - buf = detach_rbuf! @resbuf = rv + buf = '' end # continue looping in middle "case @resbuf" loop when :wait_readable @@ -109,7 +103,6 @@ class Yahns::ProxyPass # :nodoc: when Array vec = rv # partial write, retry in case loop when :wait_writable - detach_rbuf! req[0] = vec return :wait_writable when nil @@ -128,7 +121,6 @@ class Yahns::ProxyPass # :nodoc: when String buf = rv # partial write, retry in case loop when :wait_writable - detach_rbuf! req[0] = buf return :wait_writable when nil -- EW