mirror of
https://github.com/puma/puma.git
synced 2022-11-09 13:48:40 -05:00
a686152bf5
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@379 19e92222-5c0b-0410-8929-a290d50e31e9
34 lines
No EOL
553 B
Ruby
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 |