changeset 22342:a1b3b7894611

CyclicAssumption: use AtomicReferenceFieldUpdater for the assumption field
author Andreas Woess <andreas.woess@oracle.com>
date Wed, 04 Nov 2015 11:03:08 +0100
parents 4df3d8fd6cfd
children 76f80b4b48bc 7d3d77397010
files truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/utilities/CyclicAssumption.java
diffstat 1 files changed, 8 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/utilities/CyclicAssumption.java	Wed Nov 04 10:47:09 2015 +0100
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/utilities/CyclicAssumption.java	Wed Nov 04 11:03:08 2015 +0100
@@ -24,10 +24,11 @@
  */
 package com.oracle.truffle.api.utilities;
 
+import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
+
 import com.oracle.truffle.api.Assumption;
 import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
 import com.oracle.truffle.api.Truffle;
-import java.util.concurrent.atomic.AtomicReference;
 
 /**
  * Holds an {@link Assumption}, and knows how to recreate it with the same properties on
@@ -39,22 +40,24 @@
 public class CyclicAssumption {
 
     private final String name;
-    private final AtomicReference<Assumption> assumption;
+    private volatile Assumption assumption;
+
+    private static final AtomicReferenceFieldUpdater<CyclicAssumption, Assumption> ASSUMPTION_UPDATER = AtomicReferenceFieldUpdater.newUpdater(CyclicAssumption.class, Assumption.class, "assumption");
 
     public CyclicAssumption(String name) {
         this.name = name;
-        this.assumption = new AtomicReference<>(Truffle.getRuntime().createAssumption(name));
+        this.assumption = Truffle.getRuntime().createAssumption(name);
     }
 
     @TruffleBoundary
     public void invalidate() {
         Assumption newAssumption = Truffle.getRuntime().createAssumption(name);
-        Assumption oldAssumption = assumption.getAndSet(newAssumption);
+        Assumption oldAssumption = ASSUMPTION_UPDATER.getAndSet(this, newAssumption);
         oldAssumption.invalidate();
     }
 
     public Assumption getAssumption() {
-        return assumption.get();
+        return assumption;
     }
 
 }