# HG changeset patch # User Benoit Daloze # Date 1425907335 -3600 # Node ID dc7189b2bb5fe9569cce923beb261334435ae267 # Parent 2f5d4df2af9085a43d6bc6a504ae6cb24dace5e2 CyclicAssumption: Use an AtomicReference to ensure invalidation. diff -r 2f5d4df2af90 -r dc7189b2bb5f graal/com.oracle.truffle.api/src/com/oracle/truffle/api/utilities/CyclicAssumption.java --- 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; 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(); } }