Hi all,
I am using a Mutex to protect a function, but I need to call into the
function again from the same thread without deadlocking:
class A
def initialize
@m = Mutex.new
end
def a
@m.synchronize { b }
end
def b
@m.synchronize { puts "hello" }
end
end
A.new.a #-> deadlock
It seems to me that to achieve this, all i need to do is track which thread
has the mutex locked, and allow access if the same thread requests it again:
class Mutex2
def initialize
@m = Mutex.new
@l = nil
end
def synchronize
if @l == Thread.current
yield
else
@m.synchronize {
@l = Thread.current
begin
yield
ensure
@l = nil
end
}
end
end
end
q1) am i reinventing the wheel and/or making it square?
q2) is this safe?
TIA
Martin