summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKazuki Yamaguchi <k@rhe.jp>2015-10-22 20:44:08 +0900
committerKazuki Yamaguchi <k@rhe.jp>2015-10-22 20:44:08 +0900
commit3075a3e1432158f0e5b29d035affb67e50b1226b (patch)
tree417d1c01354c72c301e1de25a261c4022b6508c2
parent8aae57e6a3ea2d2367e9b4a82aa3af46c9f05720 (diff)
downloadplum-3075a3e1432158f0e5b29d035affb67e50b1226b.tar.gz
connection: fix 'ThreadError: deadlock; recursive locking': close BodyProxy after use
-rw-r--r--lib/plum/rack/connection.rb14
1 files changed, 9 insertions, 5 deletions
diff --git a/lib/plum/rack/connection.rb b/lib/plum/rack/connection.rb
index 23314bd..cae7080 100644
--- a/lib/plum/rack/connection.rb
+++ b/lib/plum/rack/connection.rb
@@ -55,11 +55,15 @@ module Plum
r_headers, r_body = new_resp(@app.call(env))
if r_body.is_a?(::Rack::BodyProxy)
- stream.respond(r_headers, end_stream: false)
- r_body.each { |part|
- stream.send_data(part, end_stream: false)
- }
- stream.send_data(nil)
+ begin
+ stream.respond(r_headers, end_stream: false)
+ r_body.each { |part|
+ stream.send_data(part, end_stream: false)
+ }
+ stream.send_data(nil)
+ ensure
+ r_body.close
+ end
else
stream.respond(r_headers, r_body)
end