class Qonfig::DataSet::Lock

@api private @since 0.13.0

Attributes

access_lock[R]

@return [Mutex]

@api private @since 0.13.0

arbitary_lock[R]

@return [Mutex]

@api private @since 0.17.0

definition_lock[R]

@return [Mutex]

@api private @since 0.13.0

Public Class Methods

new() click to toggle source

@return [void]

@api private @since 0.13.0

# File lib/qonfig/data_set/lock.rb, line 10
def initialize
  @access_lock = Mutex.new
  @definition_lock = Mutex.new
  @arbitary_lock = Mutex.new
end

Public Instance Methods

thread_safe_access(&instructions) click to toggle source

@param instructions [Block] @return [void]

@api private @since 0.13.0

# File lib/qonfig/data_set/lock.rb, line 30
def thread_safe_access(&instructions)
  if arbitary_lock.locked?
    # :nocov:
    # NOTE: covered in thread-based specs but simplecov can't gather this fact
    with_arbitary_access { acquire_access_lock(&instructions) } # :nocov:
    # :nocov:
  else
    acquire_access_lock(&instructions)
  end
end
thread_safe_definition(&instructions) click to toggle source

@param instructions [Block] @return [void]

@api private @since 0.13.0

# File lib/qonfig/data_set/lock.rb, line 46
def thread_safe_definition(&instructions)
  if arbitary_lock.locked?
    # :nocov:
    # NOTE: covered in thread-based specs but simplecov can't gather this fact
    with_arbitary_access { acquire_definition_lock(&instructions) }
    # :nocov:
  else
    acquire_definition_lock(&instructions)
  end
end
with_arbitary_access(&instructions) click to toggle source

@param instructions [Block] @return [void]

@api private @since 0.17.0

# File lib/qonfig/data_set/lock.rb, line 21
def with_arbitary_access(&instructions)
  acquire_arbitary_lock(&instructions)
end

Private Instance Methods

acquire_access_lock() { |: synchronize(&instructions)| ... } click to toggle source

@param instructions [Block] @return [void]

@api private @since 0.13.0

# File lib/qonfig/data_set/lock.rb, line 91
def acquire_access_lock(&instructions)
  access_lock.owned? ? yield : access_lock.synchronize(&instructions)
end
acquire_arbitary_lock() { |: synchronize(&instructions)| ... } click to toggle source

@param instructions [Block] @return [void]

@api private @since 0.17.0

# File lib/qonfig/data_set/lock.rb, line 82
def acquire_arbitary_lock(&instructions)
  arbitary_lock.owned? ? yield : arbitary_lock.synchronize(&instructions)
end
acquire_definition_lock() { |: synchronize(&instructions)| ... } click to toggle source

@param instructions [Block] @return [void]

@api private @since 0.13.0

# File lib/qonfig/data_set/lock.rb, line 100
def acquire_definition_lock(&instructions)
  definition_lock.owned? ? yield : definition_lock.synchronize(&instructions)
end