class ThreadSafe::AtomicReferenceCacheBackend::Table

def try_to_cas_in_computed(i, hash, key)

def try_to_cas_in_computed(i, hash, key)
  succeeded = false
  new_value = nil
  new_node  = Node.new(locked_hash = hash | LOCKED, key, NULL)
  if cas(i, nil, new_node)
    begin
      if NULL == (new_value = yield(NULL))
        was_null = true
      else
        new_node.value = new_value
      end
      succeeded = true
    ensure
      volatile_set(i, nil) if !succeeded || was_null
      new_node.unlock_via_hash(locked_hash, hash)
    end
  end
  return succeeded, new_value
end