--- jsr166/src/jsr166y/ForkJoinTask.java 2013/01/09 02:51:37 1.99 +++ jsr166/src/jsr166y/ForkJoinTask.java 2015/09/03 22:54:46 1.102 @@ -395,11 +395,13 @@ public abstract class ForkJoinTask im final Throwable ex; ExceptionNode next; final long thrower; // use id not ref to avoid weak cycles + final int hashCode; // store task hashCode before weak ref disappears ExceptionNode(ForkJoinTask task, Throwable ex, ExceptionNode next) { super(task, exceptionTableRefQueue); this.ex = ex; this.next = next; this.thrower = Thread.currentThread().getId(); + this.hashCode = System.identityHashCode(task); } } @@ -468,7 +470,7 @@ public abstract class ForkJoinTask im } /** - * Removes exception node and clears status + * Removes exception node and clears status. */ private void clearExceptionalCompletion() { int h = System.identityHashCode(this); @@ -561,9 +563,9 @@ public abstract class ForkJoinTask im private static void expungeStaleExceptions() { for (Object x; (x = exceptionTableRefQueue.poll()) != null;) { if (x instanceof ExceptionNode) { - ForkJoinTask key = ((ExceptionNode)x).get(); + int hashCode = ((ExceptionNode)x).hashCode; ExceptionNode[] t = exceptionTable; - int i = System.identityHashCode(key) & (t.length - 1); + int i = hashCode & (t.length - 1); ExceptionNode e = t[i]; ExceptionNode pred = null; while (e != null) { @@ -1326,7 +1328,7 @@ public abstract class ForkJoinTask im } /** - * Adaptor for Runnables. This implements RunnableFuture + * Adapter for Runnables. This implements RunnableFuture * to be compliant with AbstractExecutorService constraints * when used in ForkJoinPool. */ @@ -1347,7 +1349,7 @@ public abstract class ForkJoinTask im } /** - * Adaptor for Runnables without results + * Adapter for Runnables without results */ static final class AdaptedRunnableAction extends ForkJoinTask implements RunnableFuture { @@ -1364,7 +1366,7 @@ public abstract class ForkJoinTask im } /** - * Adaptor for Callables + * Adapter for Callables */ static final class AdaptedCallable extends ForkJoinTask implements RunnableFuture {