ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/jsr166y/ForkJoinTask.java
(Generate patch)

Comparing jsr166/src/jsr166y/ForkJoinTask.java (file contents):
Revision 1.100 by jsr166, Tue Feb 5 17:09:54 2013 UTC vs.
Revision 1.102 by jsr166, Thu Sep 3 22:54:46 2015 UTC

# Line 395 | Line 395 | public abstract class ForkJoinTask<V> im
395          final Throwable ex;
396          ExceptionNode next;
397          final long thrower;  // use id not ref to avoid weak cycles
398 +        final int hashCode;  // store task hashCode before weak ref disappears
399          ExceptionNode(ForkJoinTask<?> task, Throwable ex, ExceptionNode next) {
400              super(task, exceptionTableRefQueue);
401              this.ex = ex;
402              this.next = next;
403              this.thrower = Thread.currentThread().getId();
404 +            this.hashCode = System.identityHashCode(task);
405          }
406      }
407  
# Line 561 | Line 563 | public abstract class ForkJoinTask<V> im
563      private static void expungeStaleExceptions() {
564          for (Object x; (x = exceptionTableRefQueue.poll()) != null;) {
565              if (x instanceof ExceptionNode) {
566 <                ForkJoinTask<?> key = ((ExceptionNode)x).get();
566 >                int hashCode = ((ExceptionNode)x).hashCode;
567                  ExceptionNode[] t = exceptionTable;
568 <                int i = System.identityHashCode(key) & (t.length - 1);
568 >                int i = hashCode & (t.length - 1);
569                  ExceptionNode e = t[i];
570                  ExceptionNode pred = null;
571                  while (e != null) {
# Line 1326 | Line 1328 | public abstract class ForkJoinTask<V> im
1328      }
1329  
1330      /**
1331 <     * Adaptor for Runnables. This implements RunnableFuture
1331 >     * Adapter for Runnables. This implements RunnableFuture
1332       * to be compliant with AbstractExecutorService constraints
1333       * when used in ForkJoinPool.
1334       */
# Line 1347 | Line 1349 | public abstract class ForkJoinTask<V> im
1349      }
1350  
1351      /**
1352 <     * Adaptor for Runnables without results
1352 >     * Adapter for Runnables without results
1353       */
1354      static final class AdaptedRunnableAction extends ForkJoinTask<Void>
1355          implements RunnableFuture<Void> {
# Line 1364 | Line 1366 | public abstract class ForkJoinTask<V> im
1366      }
1367  
1368      /**
1369 <     * Adaptor for Callables
1369 >     * Adapter for Callables
1370       */
1371      static final class AdaptedCallable<T> extends ForkJoinTask<T>
1372          implements RunnableFuture<T> {

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines