1
0
Fork 0
mirror of https://github.com/puma/puma.git synced 2022-11-09 13:48:40 -05:00
puma--puma/lib/mutex_fix.rb
zedshaw a686152bf5 Including the mutex fix for folks by default.
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@379 19e92222-5c0b-0410-8929-a290d50e31e9
2006-11-15 19:00:47 +00:00

34 lines
No EOL
553 B
Ruby

require 'thread'
# monkey patch Mutex so it does not leak memory.
class Mutex
def lock
while (Thread.critical = true; @locked)
@waiting.unshift Thread.current
Thread.stop
end
@locked = true
Thread.critical = false
self
end
def unlock
return unless @locked
Thread.critical = true
@locked = false
begin
t = @waiting.pop
t.wakeup if t
rescue ThreadError
retry
end
Thread.critical = false
begin
t.run if t
rescue ThreadError
end
self
end
end