class EventMachine::Synchrony::Thread::Mutex

def sleep(timeout = nil)

def sleep(timeout = nil)
  unlock    
  beg = Time.now
  current = Fiber.current
  @slept[current] = true
  if timeout
    timer = EM.add_timer(timeout) do
      _wakeup(current)
    end
    Fiber.yield
    EM.cancel_timer timer # if we resumes not via timer
  else
    Fiber.yield
  end
  @slept.delete current
  yield if block_given?
  lock
  Time.now - beg
end