2 * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.controller.md.sal.dom.spi;
10 import com.google.common.base.Preconditions;
11 import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
12 import java.util.concurrent.locks.Lock;
15 * A stable read-only snapshot of a {@link AbstractRegistrationTree}.
17 * @author Robert Varga
19 * @deprecated Use {@link org.opendaylight.mdsal.dom.spi.RegistrationTreeSnapshot} instead.
22 public final class RegistrationTreeSnapshot<T> implements AutoCloseable {
23 @SuppressWarnings("rawtypes")
24 private static final AtomicIntegerFieldUpdater<RegistrationTreeSnapshot> CLOSED_UPDATER =
25 AtomicIntegerFieldUpdater.newUpdater(RegistrationTreeSnapshot.class, "closed");
26 private final RegistrationTreeNode<T> node;
27 private final Lock lock;
29 // Used via CLOSED_UPDATER
30 @SuppressWarnings("unused")
31 private volatile int closed = 0;
33 RegistrationTreeSnapshot(final Lock lock, final RegistrationTreeNode<T> node) {
34 this.lock = Preconditions.checkNotNull(lock);
35 this.node = Preconditions.checkNotNull(node);
38 public RegistrationTreeNode<T> getRootNode() {
44 if (CLOSED_UPDATER.compareAndSet(this, 0, 1)) {