summary refs log tree commit
diff options
context:
space:
mode:
authorJan Xie <jan.h.xie@gmail.com>2011-06-14 16:34:38 +0800
committerKonstantin Haase <konstantin.mailinglists@googlemail.com>2011-06-16 12:26:55 +0200
commitbe6e4180008313f5885a245481faab097d100566 (patch)
tree478e21be9f2833de1b5b5457740fbcee2816b93e
parentdbb7298a81603d4be097ce24ce131eb047385a24 (diff)
downloadrack-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.rb10
-rw-r--r--test/spec_body_proxy.rb3
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