RFR: ForkJoinTask leaks exceptions
Chris Hegarty
chris.hegarty at oracle.com
Mon Oct 14 15:52:08 UTC 2013
This is a request to pull a small change to ForkJoinTask into jdk8, from
the jsr166 CVS. This was first discussed over on c-i [1] a few weeks back.
diff -r 077237e4613f
src/share/classes/java/util/concurrent/ForkJoinTask.java
--- a/src/share/classes/java/util/concurrent/ForkJoinTask.java Mon Oct
14 11:47:54 2013 +0100
+++ b/src/share/classes/java/util/concurrent/ForkJoinTask.java Mon Oct
14 16:44:01 2013 +0100
@@ -439,11 +439,13 @@ public abstract class ForkJoinTask<V> 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);
}
}
@@ -605,9 +607,9 @@ public abstract class ForkJoinTask<V> 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) {
-Chris
[1]
http://jsr166-concurrency.10961.n7.nabble.com/ForkJoinTask-leaks-exceptions-td10134.html
More information about the core-libs-dev
mailing list