Mercurial > hg > truffle
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; } }