diff options
author | Jan Xie <jan.h.xie@gmail.com> | 2011-06-14 16:34:38 +0800 |
---|---|---|
committer | Konstantin Haase <konstantin.mailinglists@googlemail.com> | 2011-06-16 12:26:55 +0200 |
commit | be6e4180008313f5885a245481faab097d100566 (patch) | |
tree | 478e21be9f2833de1b5b5457740fbcee2816b93e | |
parent | dbb7298a81603d4be097ce24ce131eb047385a24 (diff) | |
download | rack-be6e4180008313f5885a245481faab097d100566.tar.gz |
block should not be called if IOError raised
Signed-off-by: Konstantin Haase <konstantin.mailinglists@googlemail.com>
-rw-r--r-- | lib/rack/body_proxy.rb | 10 | ||||
-rw-r--r-- | test/spec_body_proxy.rb | 3 |
2 files changed, 8 insertions, 5 deletions
diff --git a/lib/rack/body_proxy.rb b/lib/rack/body_proxy.rb index 81e770dd..921af6ba 100644 --- a/lib/rack/body_proxy.rb +++ b/lib/rack/body_proxy.rb @@ -10,10 +10,12 @@ module Rack def close raise IOError, "closed stream" if @closed - @body.close if @body.respond_to? :close - ensure - @block.call - @closed = true + begin + @body.close if @body.respond_to? :close + ensure + @block.call + @closed = true + end end def closed? diff --git a/test/spec_body_proxy.rb b/test/spec_body_proxy.rb index 02e4a941..5c5a080b 100644 --- a/test/spec_body_proxy.rb +++ b/test/spec_body_proxy.rb @@ -33,7 +33,8 @@ describe Rack::BodyProxy do end should 'not close more than one time' do - proxy = Rack::BodyProxy.new([]) { } + count = 0 + proxy = Rack::BodyProxy.new([]) { count += 1; raise "Block invoked more than 1 time!" if count > 1 } proxy.close lambda { proxy.close |