class Concurrent::Collection::AtomicReferenceMapBackend

def attempt_get_and_set(key, value, hash, current_table, i, node, node_hash)

def attempt_get_and_set(key, value, hash, current_table, i, node, node_hash)
  node_nesting = nil
  current_table.try_lock_via_hash(i, node, node_hash) do
    node_nesting    = 1
    old_value       = nil
    found_old_value = false
    while node
      if node.matches?(key, hash) && NULL != (old_value = node.value)
        found_old_value = true
        node.value = value
        break
      end
      last = node
      unless node = node.next
        last.next = Node.new(hash, key, value)
        break
      end
      node_nesting += 1
    end
    return true, old_value if found_old_value
    increment_size
    true
  end
ensure
  check_for_resize if node_nesting && (node_nesting > 1 || current_table.size <= 64)
end