From: Martin Hart Date: 2004-05-28T01:47:31+09:00 Subject: Mutex re-entrancy 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