Fix SchemaPath.legacyPath visibility 87/10487/2
authorRobert Varga <rovarga@cisco.com>
Fri, 29 Aug 2014 14:59:18 +0000 (16:59 +0200)
committerRobert Varga <rovarga@cisco.com>
Fri, 29 Aug 2014 21:35:41 +0000 (23:35 +0200)
Thread safety is not assured without legacyPath being volatile.

Change-Id: I7e69777cb4af6b3bc359a0a2b218ecdba433f369
Signed-off-by: Robert Varga <rovarga@cisco.com>
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/SchemaPath.java

index 7bae5f0f57daf182827fbcedbc5d045689ef62f7..56d240aed1ac426e4fd8ebd30ca4e87a9e09f446 100644 (file)
@@ -92,14 +92,21 @@ public abstract class SchemaPath implements Immutable {
      * Cached legacy path, filled-in when {@link #getPath()} or {@link #getPathTowardsRoot()}
      * is invoked.
      */
-    private ImmutableList<QName> legacyPath;
+    private volatile ImmutableList<QName> legacyPath;
 
     private ImmutableList<QName> getLegacyPath() {
-        if (legacyPath == null) {
-            legacyPath = ImmutableList.copyOf(getPathTowardsRoot()).reverse();
+        ImmutableList<QName> ret = legacyPath;
+        if (ret == null) {
+            synchronized (this) {
+                ret = legacyPath;
+                if (ret == null) {
+                    ret = ImmutableList.copyOf(getPathTowardsRoot()).reverse();
+                    legacyPath = ret;
+                }
+            }
         }
 
-        return legacyPath;
+        return ret;
     }
 
     /**