diff options
author | Jeremy Kemper <jeremy@bitsweat.net> | 2008-12-18 14:48:53 -0800 |
---|---|---|
committer | Jeremy Kemper <jeremy@bitsweat.net> | 2008-12-18 14:48:53 -0800 |
commit | 86abd6887dac9ee233740399f9e5758309af512e (patch) | |
tree | 82a48697582d1eadba5bea44bab259f8b1f9d42c /actionpack/lib | |
parent | 788ab8458ae2d4bff2ff07eecbb2ea6b7f308381 (diff) | |
download | rails-86abd6887dac9ee233740399f9e5758309af512e.tar.gz rails-86abd6887dac9ee233740399f9e5758309af512e.tar.bz2 rails-86abd6887dac9ee233740399f9e5758309af512e.zip |
Ensure rack.multithread is set back to original value. Accept external lock.
Diffstat (limited to 'actionpack/lib')
-rw-r--r-- | actionpack/lib/action_controller/lock.rb | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/actionpack/lib/action_controller/lock.rb b/actionpack/lib/action_controller/lock.rb index b4b0902f18..c50762216e 100644 --- a/actionpack/lib/action_controller/lock.rb +++ b/actionpack/lib/action_controller/lock.rb @@ -1,18 +1,16 @@ module ActionController class Lock - def initialize(app) - @app = app - @lock = Mutex.new + FLAG = 'rack.multithread'.freeze + + def initialize(app, lock = Mutex.new) + @app, @lock = app, lock end def call(env) - old_multithread = env["rack.multithread"] - env["rack.multithread"] = false - response = @lock.synchronize do - @app.call(env) - end - env["rack.multithread"] = old_multithread - response + old, env[FLAG] = env[FLAG], false + @lock.synchronize { @app.call(env) } + ensure + env[FLAG] = old end end end |