diff options
Diffstat (limited to 'lib/rainbows/rev')
-rw-r--r-- | lib/rainbows/rev/client.rb | 15 | ||||
-rw-r--r-- | lib/rainbows/rev/sendfile.rb | 2 |
2 files changed, 9 insertions, 8 deletions
diff --git a/lib/rainbows/rev/client.rb b/lib/rainbows/rev/client.rb index e0572bb..f9284e8 100644 --- a/lib/rainbows/rev/client.rb +++ b/lib/rainbows/rev/client.rb @@ -124,13 +124,11 @@ module Rainbows return if DeferredResponse === body begin - begin - rev_sendfile(body) - rescue EOFError # expected at file EOF - @deferred_bodies.shift - body.close - close if :close == @state && @deferred_bodies.empty? - end + rev_sendfile(body) + rescue EOFError # expected at file EOF + @deferred_bodies.shift + body.close + close if :close == @state && @deferred_bodies.empty? rescue => e handle_error(e) end @@ -140,6 +138,9 @@ module Rainbows end def on_close + while f = @deferred_bodies.shift + DeferredResponse === f or f.close + end CONN.delete(self) end diff --git a/lib/rainbows/rev/sendfile.rb b/lib/rainbows/rev/sendfile.rb index 03ce41c..11cd114 100644 --- a/lib/rainbows/rev/sendfile.rb +++ b/lib/rainbows/rev/sendfile.rb @@ -14,8 +14,8 @@ module Rainbows::Rev::Sendfile def rev_sendfile(body) body.offset += @_io.sendfile_nonblock(body, body.offset, 0x10000) + enable_write_watcher rescue Errno::EAGAIN - ensure enable_write_watcher end else |