diff graal/com.oracle.truffle.api/src/com/oracle/truffle/api/utilities/CyclicAssumption.java @ 19706:dc7189b2bb5f

CyclicAssumption: Use an AtomicReference to ensure invalidation.
author Benoit Daloze <benoit.daloze@jku.at>
date Mon, 09 Mar 2015 14:22:15 +0100
parents f28ea693056f
children
line wrap: on
line diff
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/utilities/CyclicAssumption.java	Mon Mar 09 00:41:43 2015 +0100
+++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/utilities/CyclicAssumption.java	Mon Mar 09 14:22:15 2015 +0100
@@ -24,6 +24,8 @@
  */
 package com.oracle.truffle.api.utilities;
 
+import java.util.concurrent.atomic.*;
+
 import com.oracle.truffle.api.*;
 
 /**
@@ -36,23 +38,21 @@
 public class CyclicAssumption {
 
     private final String name;
-    private Assumption assumption;
+    private final AtomicReference<Assumption> assumption;
 
     public CyclicAssumption(String name) {
         this.name = name;
-        invalidate();
+        this.assumption = new AtomicReference<>(Truffle.getRuntime().createAssumption(name));
     }
 
     public void invalidate() {
-        if (assumption != null) {
-            assumption.invalidate();
-        }
-
-        assumption = Truffle.getRuntime().createAssumption(name);
+        Assumption newAssumption = Truffle.getRuntime().createAssumption(name);
+        Assumption oldAssumption = assumption.getAndSet(newAssumption);
+        oldAssumption.invalidate();
     }
 
     public Assumption getAssumption() {
-        return assumption;
+        return assumption.get();
     }
 
 }