class Concurrent::Collection::AtomicReferenceMapBackend

def attempt_compute(key, hash, current_table, i, node, node_hash)

def attempt_compute(key, hash, current_table, i, node, node_hash)
  added = false
  current_table.try_lock_via_hash(i, node, node_hash) do
    predecessor_node = nil
    while true
      if node.matches?(key, hash) && NULL != (value = node.value)
        if NULL == (node.value = value = yield(value))
          current_table.delete_node_at(i, node, predecessor_node)
          decrement_size
          value = nil
        end
        return true, value
      end
      predecessor_node = node
      unless node = node.next
        if NULL == (value = yield(NULL))
          value = nil
        else
          predecessor_node.next = Node.new(hash, key, value)
          added = true
          increment_size
        end
        return true, value
      end
    end
  end
ensure
  check_for_resize if added
end