JDK-8353331 : Test ForkJoinPool20Test::testFixedDelaySequence is failing
  • Type: Bug
  • Component: core-libs
  • Sub-Component: java.util.concurrent
  • Affected Version: 25
  • Priority: P3
  • Status: Resolved
  • Resolution: Fixed
  • Submitted: 2025-04-01
  • Updated: 2025-07-08
  • Resolved: 2025-04-01
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 25
25 b17Fixed
Related Reports
Causes :  
Description
STARTED    ForkJoinPool20Test::testFixedDelaySequence 'testFixedDelaySequence'
junit.framework.AssertionFailedError
------ stacktrace dump start ------
"main" prio=5 Id=3 WAITING on java.lang.Thread@21464c23
	at java.base@25-ea/java.lang.Object.wait0(Native Method)
	-  waiting on java.lang.Thread@21464c23
	at java.base@25-ea/java.lang.Object.wait(Object.java:389)
	at java.base@25-ea/java.lang.Thread.join(Thread.java:1860)
	at java.base@25-ea/java.lang.Thread.join(Thread.java:1936)
	at app//com.sun.javatest.regtest.agent.MainWrapper.main(MainWrapper.java:85)

"Notification Thread" daemon prio=9 Id=23 RUNNABLE

"MainThread" prio=5 Id=25 TIMED_WAITING on java.util.concurrent.CountDownLatch$Sync@2f768524
	at java.base@25-ea/jdk.internal.misc.Unsafe.park(Native Method)
	-  waiting on java.util.concurrent.CountDownLatch$Sync@2f768524
	at java.base@25-ea/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:271)
	at java.base@25-ea/java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:791)
	at java.base@25-ea/java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquireSharedNanos(AbstractQueuedSynchronizer.java:1165)
	at java.base@25-ea/java.util.concurrent.CountDownLatch.await(CountDownLatch.java:276)
	at java.base@25-ea/java.util.concurrent.ForkJoinPool.awaitTermination(ForkJoinPool.java:4143)
	at app//JSR166TestCase.joinPool(JSR166TestCase.java:1087)
	at app//JSR166TestCase$PoolCleaner.close(JSR166TestCase.java:1033)
	...

"ForkJoinPool.commonPool-delayScheduler" daemon prio=5 Id=2015 TIMED_WAITING
	at java.base@25-ea/jdk.internal.misc.Unsafe.park(Native Method)
	at java.base@25-ea/java.util.concurrent.DelayScheduler.loop(DelayScheduler.java:253)
	at java.base@25-ea/java.util.concurrent.DelayScheduler.run(DelayScheduler.java:221)

"pool-1-thread-4" prio=5 Id=3022 TIMED_WAITING on java.util.concurrent.SynchronousQueue$Transferer@57711d68
	at java.base@25-ea/jdk.internal.misc.Unsafe.park(Native Method)
	-  waiting on java.util.concurrent.SynchronousQueue$Transferer@57711d68
	at java.base@25-ea/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:408)
	at java.base@25-ea/java.util.concurrent.LinkedTransferQueue$DualNode.await(LinkedTransferQueue.java:452)
	at java.base@25-ea/java.util.concurrent.SynchronousQueue$Transferer.xferLifo(SynchronousQueue.java:194)
	at java.base@25-ea/java.util.concurrent.SynchronousQueue.xfer(SynchronousQueue.java:235)
	at java.base@25-ea/java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:338)
	at java.base@25-ea/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1015)
	at java.base@25-ea/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
	...

"pool-1-thread-5" prio=5 Id=3023 TIMED_WAITING on java.util.concurrent.SynchronousQueue$Transferer@57711d68
	at java.base@25-ea/jdk.internal.misc.Unsafe.park(Native Method)
	-  waiting on java.util.concurrent.SynchronousQueue$Transferer@57711d68
	at java.base@25-ea/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:408)
	at java.base@25-ea/java.util.concurrent.LinkedTransferQueue$DualNode.await(LinkedTransferQueue.java:452)
	at java.base@25-ea/java.util.concurrent.SynchronousQueue$Transferer.xferLifo(SynchronousQueue.java:194)
	at java.base@25-ea/java.util.concurrent.SynchronousQueue.xfer(SynchronousQueue.java:235)
	at java.base@25-ea/java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:338)
	at java.base@25-ea/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1015)
	at java.base@25-ea/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
	...

"pool-1-thread-6" prio=5 Id=3024 TIMED_WAITING on java.util.concurrent.SynchronousQueue$Transferer@57711d68
	at java.base@25-ea/jdk.internal.misc.Unsafe.park(Native Method)
	-  waiting on java.util.concurrent.SynchronousQueue$Transferer@57711d68
	at java.base@25-ea/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:408)
	at java.base@25-ea/java.util.concurrent.LinkedTransferQueue$DualNode.await(LinkedTransferQueue.java:452)
	at java.base@25-ea/java.util.concurrent.SynchronousQueue$Transferer.xferLifo(SynchronousQueue.java:194)
	at java.base@25-ea/java.util.concurrent.SynchronousQueue.xfer(SynchronousQueue.java:235)
	at java.base@25-ea/java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:338)
	at java.base@25-ea/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1015)
	at java.base@25-ea/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
	...

"pool-1-thread-7" prio=5 Id=3025 TIMED_WAITING on java.util.concurrent.SynchronousQueue$Transferer@57711d68
	at java.base@25-ea/jdk.internal.misc.Unsafe.park(Native Method)
	-  waiting on java.util.concurrent.SynchronousQueue$Transferer@57711d68
	at java.base@25-ea/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:408)
	at java.base@25-ea/java.util.concurrent.LinkedTransferQueue$DualNode.await(LinkedTransferQueue.java:452)
	at java.base@25-ea/java.util.concurrent.SynchronousQueue$Transferer.xferLifo(SynchronousQueue.java:194)
	at java.base@25-ea/java.util.concurrent.SynchronousQueue.xfer(SynchronousQueue.java:235)
	at java.base@25-ea/java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:338)
	at java.base@25-ea/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1015)
	at java.base@25-ea/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
	...

"pool-1-thread-8" prio=5 Id=3028 TIMED_WAITING on java.util.concurrent.SynchronousQueue$Transferer@57711d68
	at java.base@25-ea/jdk.internal.misc.Unsafe.park(Native Method)
	-  waiting on java.util.concurrent.SynchronousQueue$Transferer@57711d68
	at java.base@25-ea/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:408)
	at java.base@25-ea/java.util.concurrent.LinkedTransferQueue$DualNode.await(LinkedTransferQueue.java:452)
	at java.base@25-ea/java.util.concurrent.SynchronousQueue$Transferer.xferLifo(SynchronousQueue.java:194)
	at java.base@25-ea/java.util.concurrent.SynchronousQueue.xfer(SynchronousQueue.java:235)
	at java.base@25-ea/java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:338)
	at java.base@25-ea/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1015)
	at java.base@25-ea/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
	...

"pool-1-thread-9" prio=5 Id=3029 TIMED_WAITING on java.util.concurrent.SynchronousQueue$Transferer@57711d68
	at java.base@25-ea/jdk.internal.misc.Unsafe.park(Native Method)
	-  waiting on java.util.concurrent.SynchronousQueue$Transferer@57711d68
	at java.base@25-ea/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:408)
	at java.base@25-ea/java.util.concurrent.LinkedTransferQueue$DualNode.await(LinkedTransferQueue.java:452)
	at java.base@25-ea/java.util.concurrent.SynchronousQueue$Transferer.xferLifo(SynchronousQueue.java:194)
	at java.base@25-ea/java.util.concurrent.SynchronousQueue.xfer(SynchronousQueue.java:235)
	at java.base@25-ea/java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:338)
	at java.base@25-ea/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1015)
	at java.base@25-ea/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
	...

"pool-1-thread-10" prio=5 Id=3030 TIMED_WAITING on java.util.concurrent.SynchronousQueue$Transferer@57711d68
	at java.base@25-ea/jdk.internal.misc.Unsafe.park(Native Method)
	-  waiting on java.util.concurrent.SynchronousQueue$Transferer@57711d68
	at java.base@25-ea/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:408)
	at java.base@25-ea/java.util.concurrent.LinkedTransferQueue$DualNode.await(LinkedTransferQueue.java:452)
	at java.base@25-ea/java.util.concurrent.SynchronousQueue$Transferer.xferLifo(SynchronousQueue.java:194)
	at java.base@25-ea/java.util.concurrent.SynchronousQueue.xfer(SynchronousQueue.java:235)
	at java.base@25-ea/java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:338)
	at java.base@25-ea/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1015)
	at java.base@25-ea/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
	...

"pool-1-thread-11" prio=5 Id=3031 TIMED_WAITING on java.util.concurrent.SynchronousQueue$Transferer@57711d68
	at java.base@25-ea/jdk.internal.misc.Unsafe.park(Native Method)
	-  waiting on java.util.concurrent.SynchronousQueue$Transferer@57711d68
	at java.base@25-ea/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:408)
	at java.base@25-ea/java.util.concurrent.LinkedTransferQueue$DualNode.await(LinkedTransferQueue.java:452)
	at java.base@25-ea/java.util.concurrent.SynchronousQueue$Transferer.xferLifo(SynchronousQueue.java:194)
	at java.base@25-ea/java.util.concurrent.SynchronousQueue.xfer(SynchronousQueue.java:235)
	at java.base@25-ea/java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:338)
	at java.base@25-ea/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1015)
	at java.base@25-ea/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
	...

"pool-1-thread-12" prio=5 Id=3036 TIMED_WAITING on java.util.concurrent.SynchronousQueue$Transferer@57711d68
	at java.base@25-ea/jdk.internal.misc.Unsafe.park(Native Method)
	-  waiting on java.util.concurrent.SynchronousQueue$Transferer@57711d68
	at java.base@25-ea/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:408)
	at java.base@25-ea/java.util.concurrent.LinkedTransferQueue$DualNode.await(LinkedTransferQueue.java:452)
	at java.base@25-ea/java.util.concurrent.SynchronousQueue$Transferer.xferLifo(SynchronousQueue.java:194)
	at java.base@25-ea/java.util.concurrent.SynchronousQueue.xfer(SynchronousQueue.java:235)
	at java.base@25-ea/java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:338)
	at java.base@25-ea/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1015)
	at java.base@25-ea/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
	...

"pool-1-thread-13" prio=5 Id=3037 TIMED_WAITING on java.util.concurrent.SynchronousQueue$Transferer@57711d68
	at java.base@25-ea/jdk.internal.misc.Unsafe.park(Native Method)
	-  waiting on java.util.concurrent.SynchronousQueue$Transferer@57711d68
	at java.base@25-ea/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:408)
	at java.base@25-ea/java.util.concurrent.LinkedTransferQueue$DualNode.await(LinkedTransferQueue.java:452)
	at java.base@25-ea/java.util.concurrent.SynchronousQueue$Transferer.xferLifo(SynchronousQueue.java:194)
	at java.base@25-ea/java.util.concurrent.SynchronousQueue.xfer(SynchronousQueue.java:235)
	at java.base@25-ea/java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:338)
	at java.base@25-ea/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1015)
	at java.base@25-ea/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
	...

"ForkJoinPool-346-delayScheduler" daemon prio=5 Id=3063 WAITING
	at java.base@25-ea/jdk.internal.misc.Unsafe.park(Native Method)
	at java.base@25-ea/java.util.concurrent.DelayScheduler.loop(DelayScheduler.java:253)
	at java.base@25-ea/java.util.concurrent.DelayScheduler.run(DelayScheduler.java:221)

"ForkJoinPool-346-worker-1" daemon prio=5 Id=3064 RUNNABLE
	at java.management@25-ea/sun.management.ThreadImpl.dumpThreads0(Native Method)
	at java.management@25-ea/sun.management.ThreadImpl.dumpAllThreads(ThreadImpl.java:505)
	at java.management@25-ea/sun.management.ThreadImpl.dumpAllThreads(ThreadImpl.java:493)
	at app//JSR166TestCase.dumpTestThreads(JSR166TestCase.java:1174)
	at app//JSR166TestCase.threadRecordFailure(JSR166TestCase.java:813)
	at app//JSR166TestCase.threadUnexpectedException(JSR166TestCase.java:998)
	at app//JSR166TestCase$CheckedRunnable.run(JSR166TestCase.java:1573)
	at java.base@25-ea/java.util.concurrent.DelayScheduler$ScheduledForkJoinTask.compute(DelayScheduler.java:510)
	...

------ stacktrace dump end ------
junit.framework.AssertionFailedError
	at junit.framework.Assert.fail(Assert.java:55)
	at junit.framework.Assert.assertTrue(Assert.java:22)
	at junit.framework.Assert.assertTrue(Assert.java:31)
	at junit.framework.TestCase.assertTrue(TestCase.java:200)
	at ForkJoinPool20Test$9.realRun(ForkJoinPool20Test.java:453)
	at JSR166TestCase$CheckedRunnable.run(JSR166TestCase.java:1571)
	at java.base/java.util.concurrent.DelayScheduler$ScheduledForkJoinTask.compute(DelayScheduler.java:510)
	at java.base/java.util.concurrent.ForkJoinTask$InterruptibleTask.exec(ForkJoinTask.java:1659)
	at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:511)
	at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1452)
	at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:2027)
	at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:187)
junit.framework.AssertionFailedError
	at junit.framework.Assert.fail(Assert.java:55)
	at junit.framework.Assert.assertTrue(Assert.java:22)
	at junit.framework.Assert.assertTrue(Assert.java:31)
	at junit.framework.TestCase.assertTrue(TestCase.java:200)
	at ForkJoinPool20Test$9.realRun(ForkJoinPool20Test.java:453)
	at JSR166TestCase$CheckedRunnable.run(JSR166TestCase.java:1571)
	at java.base/java.util.concurrent.DelayScheduler$ScheduledForkJoinTask.compute(DelayScheduler.java:510)
	at java.base/java.util.concurrent.ForkJoinTask$InterruptibleTask.exec(ForkJoinTask.java:1659)
	at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:511)
	at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1452)
	at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:2027)
	at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:187)
FAILED     ForkJoinPool20Test::testFixedDelaySequence 'testFixedDelaySequence' [38ms]
Comments
A pull request was submitted for review. Branch: master URL: https://git.openjdk.org/jdk/pull/24353 Date: 2025-04-01 10:56:25 +0000
01-04-2025

In testFixedDelaySequence, the periodic task may run more than 8 times before it cancelled. The simplest thing may be to drop the assert that done.getCount() > 0, it should be benign for it to run again before it is cancelled.
01-04-2025

Changeset: 2a31f69a Branch: master Author: Alan Bateman <alanb@openjdk.org> Date: 2025-04-01 12:42:02 +0000 URL: https://git.openjdk.org/jdk/commit/2a31f69a55b64358a347b2cbc2c4df1890dd6840
01-04-2025