# HG changeset patch # User Gilles Duboscq # Date 1387277708 -3600 # Node ID 4463c520f4754f2a6b53440a3aa808a78e52d6f2 # Parent 10f943c778f651c715ecc29b464c611b888dc96c Keep speculations alive in the speculation log diff -r 10f943c778f6 -r 4463c520f475 graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/SpeculationLog.java --- a/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/SpeculationLog.java Thu Dec 12 15:31:24 2013 +0100 +++ b/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/SpeculationLog.java Tue Dec 17 11:55:08 2013 +0100 @@ -23,6 +23,7 @@ package com.oracle.graal.api.code; import java.util.*; +import java.util.concurrent.*; import com.oracle.graal.api.meta.*; @@ -31,8 +32,9 @@ * */ public final class SpeculationLog { + private volatile Object lastFailed; + private volatile Collection speculations; private Set failedSpeculations; - private Object lastFailed; public synchronized void collectFailedSpeculations() { if (lastFailed != null) { @@ -41,6 +43,7 @@ } failedSpeculations.add(lastFailed); lastFailed = null; + speculations = null; } } @@ -48,6 +51,14 @@ if (failedSpeculations != null && failedSpeculations.contains(reason)) { return null; } + if (speculations == null) { + synchronized (this) { + if (speculations == null) { + speculations = new ConcurrentLinkedQueue<>(); + } + } + } + speculations.add(reason); return Constant.forObject(reason); } }