class ActiveSupport::Concurrency::ThreadLoadInterlockAwareMonitor

:nodoc:

def initialize

def initialize
  @owner = nil
  @count = 0
  @mutex = Mutex.new
end

def mon_enter

def mon_enter
  @mutex.lock if @owner != Thread.current
  @owner = Thread.current
  @count += 1
end

def mon_exit

def mon_exit
  unless @owner == Thread.current
    raise ThreadError, "current thread not owner"
  end
  @count -= 1
  return unless @count == 0
  @owner = nil
  @mutex.unlock
end

def mon_try_enter

def mon_try_enter
  if @owner != Thread.current
    return false unless @mutex.try_lock
    @owner = Thread.current
  end
  @count += 1
end