X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-dom-broker%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fmd%2Fsal%2Fdom%2Fstore%2Fimpl%2Ftree%2Fspi%2FContainerNode.java;h=3ca8db2405e44866d13f3e35adcf40b61e6d7381;hp=8f74f60498aeb515435e65b5fb4d5dd3725d9be2;hb=a5cc12f729f44ca0a5f8b7cb2e6912fdffe12e10;hpb=de14d488c480200a8b155220fad8285a1d78c9ee diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/spi/ContainerNode.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/spi/ContainerNode.java index 8f74f60498..3ca8db2405 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/spi/ContainerNode.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/spi/ContainerNode.java @@ -7,10 +7,10 @@ */ package org.opendaylight.controller.md.sal.dom.store.impl.tree.spi; -import java.util.Collections; import java.util.HashMap; import java.util.Map; +import org.opendaylight.yangtools.util.MapAdaptor; import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodeContainer; @@ -50,14 +50,14 @@ final class ContainerNode extends AbstractTreeNode { } private static final class Mutable implements MutableTreeNode { - private final Map children; private final Version version; + private Map children; private NormalizedNode data; private Version subtreeVersion; private Mutable(final ContainerNode parent) { this.data = parent.getData(); - this.children = new HashMap<>(parent.children); + this.children = MapAdaptor.getDefaultInstance().takeSnapshot(parent.children); this.subtreeVersion = parent.getSubtreeVersion(); this.version = parent.getVersion(); } @@ -84,15 +84,11 @@ final class ContainerNode extends AbstractTreeNode { @Override public TreeNode seal() { - final Map realChildren; + final TreeNode ret = new ContainerNode(data, version, MapAdaptor.getDefaultInstance().optimize(children), subtreeVersion); - if (children.isEmpty()) { - realChildren = Collections.emptyMap(); - } else { - realChildren = children; - } - - return new ContainerNode(data, version, realChildren, subtreeVersion); + // This forces a NPE if this class is accessed again. Better than corruption. + children = null; + return ret; } @Override @@ -103,8 +99,8 @@ final class ContainerNode extends AbstractTreeNode { private static ContainerNode create(final Version version, final NormalizedNode data, final Iterable> children) { - final Map map = new HashMap<>(); + final Map map = new HashMap<>(); for (NormalizedNode child : children) { map.put(child.getIdentifier(), TreeNodeFactory.createTreeNode(child, version)); }