class ActiveSupport::Dependencies::Interlock

:nodoc:
:nodoc:

def done_running

def done_running
  @lock.stop_sharing
end

def done_unloading

def done_unloading
  @lock.stop_exclusive(compatible: [:load, :unload])
end

def initialize # :nodoc:

:nodoc:
def initialize # :nodoc:
  @lock = ActiveSupport::Concurrency::ShareLock.new
end

def loading(&block)

def loading(&block)
  @lock.exclusive(purpose: :load, compatible: [:load], after_compatible: [:load], &block)
end

def permit_concurrent_loads(&block)

def permit_concurrent_loads(&block)
  @lock.yield_shares(compatible: [:load], &block)
end

def raw_state(&block) # :nodoc:

:nodoc:
def raw_state(&block) # :nodoc:
  @lock.raw_state(&block)
end

def running(&block)

def running(&block)
  @lock.sharing(&block)
end

def start_running

def start_running
  @lock.start_sharing
end

def start_unloading

def start_unloading
  @lock.start_exclusive(purpose: :unload, compatible: [:load, :unload])
end

def unloading(&block)

def unloading(&block)
  @lock.exclusive(purpose: :unload, compatible: [:load, :unload], after_compatible: [:load, :unload], &block)
end