1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
module Rack class Lock FLAG = 'rack.multithread'.freeze def initialize(app, lock = Mutex.new) @app, @lock = app, lock end def call(env) old, env[FLAG] = env[FLAG], false @lock.synchronize { @app.call(env) } ensure env[FLAG] = old end end end