lib/rainbows/event_machine/client.rb in rainbows-4.4.2 vs lib/rainbows/event_machine/client.rb in rainbows-4.4.3
- old
+ new
@@ -26,11 +26,11 @@
end
end
def quit
super
- close_connection_after_writing
+ close_connection_after_writing if nil == @deferred
end
def app_call input
set_comm_inactivity_timeout 0
@env[RACK_INPUT] = input
@@ -39,17 +39,21 @@
@env[ASYNC_CLOSE] = EM::DefaultDeferrable.new
status, headers, body = catch(:async) {
APP.call(@env.merge!(RACK_DEFAULTS))
}
- (nil == status || -1 == status) ? @deferred = true :
+ if (nil == status || -1 == status)
+ @deferred = true
+ else
ev_write_response(status, headers, body, @hp.next?)
+ end
end
def deferred_errback(orig_body)
@deferred.errback do
orig_body.close if orig_body.respond_to?(:close)
+ @deferred = nil
quit
end
end
def deferred_callback(orig_body, alive)
@@ -101,10 +105,11 @@
end
end
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
async_close = @env[ASYNC_CLOSE] and async_close.succeed
@deferred.respond_to?(:fail) and @deferred.fail