Fix TypedefEffectiveStatementImpl double-checked load 57/76257/2
authorRobert Varga <robert.varga@pantheon.tech>
Wed, 19 Sep 2018 10:46:46 +0000 (12:46 +0200)
committerRobert Varga <nite@hq.sk>
Wed, 19 Sep 2018 11:35:36 +0000 (11:35 +0000)
We really need a volatile read here to make things alright, make
the field volatile.

Change-Id: Id04917a04f9f1fdba6ded2c773571d90106e877f
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/typedef/TypedefEffectiveStatementImpl.java

index 89578a31d8a1f53c1a37a59cf81800b4a715a4dc..c2df109cec9e2867705affd108d85246692ad408 100644 (file)
@@ -42,7 +42,7 @@ final class TypedefEffectiveStatementImpl extends AbstractEffectiveSchemaNode<Ty
 
     private final TypeDefinition<?> typeDefinition;
 
-    private TypeEffectiveStatement<TypeStatement> typeStatement;
+    private volatile TypeEffectiveStatement<TypeStatement> typeStatement;
 
     TypedefEffectiveStatementImpl(final StmtContext<QName, TypedefStatement, ?> ctx) {
         super(ctx);
@@ -95,8 +95,7 @@ final class TypedefEffectiveStatementImpl extends AbstractEffectiveSchemaNode<Ty
             synchronized (this) {
                 ret = typeStatement;
                 if (ret == null) {
-                    ret = new ProxyTypeEffectiveStatement();
-                    typeStatement = ret;
+                    typeStatement = ret = new ProxyTypeEffectiveStatement();
                 }
             }
         }