From 42bf1f6de55b82af46fd8255453036c6582b7f19 Mon Sep 17 00:00:00 2001 From: Lin Jen-Shin Date: Wed, 19 Dec 2012 04:03:55 +0800 Subject: event_machine: avoid close on deferred response close_connection_after_writing only if not deferred, as in cool.io Deferred responses may buffer more data down the line, so keep the connection alive if we have a deferred response body. [ew: clear @deferred when we really want to quit, updated commit message] Acked-by: Eric Wong --- lib/rainbows/event_machine/client.rb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'lib/rainbows') diff --git a/lib/rainbows/event_machine/client.rb b/lib/rainbows/event_machine/client.rb index fc0dfe3..f3c2070 100644 --- a/lib/rainbows/event_machine/client.rb +++ b/lib/rainbows/event_machine/client.rb @@ -28,7 +28,7 @@ class Rainbows::EventMachine::Client < EM::Connection def quit super - close_connection_after_writing + close_connection_after_writing if nil == @deferred end def app_call input @@ -48,6 +48,7 @@ class Rainbows::EventMachine::Client < EM::Connection def deferred_errback(orig_body) @deferred.errback do orig_body.close if orig_body.respond_to?(:close) + @deferred = nil quit end end @@ -103,7 +104,8 @@ class Rainbows::EventMachine::Client < EM::Connection def next! @deferred.close if @deferred.respond_to?(:close) - @hp.keepalive? ? receive_data(@deferred = nil) : quit + @deferred = nil + @hp.keepalive? ? receive_data(nil) : quit end def unbind -- cgit v1.2.3-24-ge0c7