From 0b0d84c3a5fe04d0da4dbea6f343f6622a8afed9 Mon Sep 17 00:00:00 2001 From: Doug Lea Date: Thu, 11 Jun 2026 07:32:59 -0400 Subject: [PATCH] Undo a redundant signal screen --- .../java/util/concurrent/ForkJoinPool.java | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/src/java.base/share/classes/java/util/concurrent/ForkJoinPool.java b/src/java.base/share/classes/java/util/concurrent/ForkJoinPool.java index e9bb88b8aad..4c36e0bf8a6 100644 --- a/src/java.base/share/classes/java/util/concurrent/ForkJoinPool.java +++ b/src/java.base/share/classes/java/util/concurrent/ForkJoinPool.java @@ -1989,7 +1989,7 @@ public class ForkJoinPool extends AbstractExecutorService int qid, cap; WorkQueue q; ForkJoinTask[] a; if ((q = qs[qid = i & (n - 1)]) != null && (a = q.array) != null && (cap = a.length) > 0) { - int m = cap - 1, b = q.base, prevb = b - 1, propagated = prevb; + int m = cap - 1, b = q.base, prevb = b - 1; for (; ; prevb = b) { // track stalls int nb; long bp; ForkJoinTask t = (ForkJoinTask) @@ -2010,12 +2010,10 @@ public class ForkJoinPool extends AbstractExecutorService break scan; break; // probably empty } - if (b == prevb) { // stalled - rescan = true; - break scan; // reorder scan + if (b == prevb || src != qid) { + rescan = true; // stalled or busy + break scan; // reorder scan } - if (b == propagated) - propagated = nb; } } else { @@ -2026,12 +2024,9 @@ public class ForkJoinPool extends AbstractExecutorService w.source = src = qid; // volatile if (more && (prevSrc != qid || - ((qid & 1) == 0 && b != propagated && - (fifo != 0 || t.noUserHelp() != 0))) && - U.getReferenceAcquire(a, np) != null) { - propagated = nb; + ((qid & 1) == 0 && + (fifo != 0 || t.noUserHelp() != 0)))) signalWork(); - } w.topLevelExec(t, fifo); rescan = true; b = q.base;