class ActiveSupport::Concurrency::ShareLock

def wait_for(method, &block)

def wait_for(method, &block)
  @sleeping[Thread.current] = method
  @cv.wait_while(&block)
ensure
  @sleeping.delete Thread.current
end