The following test failed in the JDK18 CI:
applications/runthese/RunThese24H.java
Here's a snippet from the log file:
[stress.process.out] testReplacementAfterExchange: Passed. OKAY
[stress.process.out] testTimedExchange_InterruptedException: Passed. OKAY
[stress.process.out] java.lang.NullPointerException: Cannot invoke "String.startsWith(String)" because the return value of "java.lang.management.ThreadInfo.getLockName()" is null
[stress.process.out] at javasoft.sqe.tests.api.java.util.concurrent.JSR166TestCase.dumpTestThreads(JSR166TestCase.java:659)
[stress.process.out] at javasoft.sqe.tests.api.java.util.concurrent.JSR166TestCase.threadRecordFailure(JSR166TestCase.java:320)
[stress.process.out] at javasoft.sqe.tests.api.java.util.concurrent.JSR166TestCase.threadFail(JSR166TestCase.java:399)
[stress.process.out] at javasoft.sqe.tests.api.java.util.concurrent.JSR166TestCase.awaitTermination(JSR166TestCase.java:1045)
[stress.process.out] at javasoft.sqe.tests.api.java.util.concurrent.JSR166TestCase.awaitTermination(JSR166TestCase.java:1056)
[stress.process.out] at javasoft.sqe.tests.api.java.util.concurrent.ExchangerTest.testExchange(ExchangerTest.java:49)
[stress.process.out] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[stress.process.out] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
[stress.process.out] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[stress.process.out] at java.base/java.lang.reflect.Method.invoke(Method.java:568)
[stress.process.out] at javasoft.sqe.tests.api.junit.TestCase.invokeTestCase(TestCase.java:50)
[stress.process.out] at javasoft.sqe.javatest.lib.MultiTest.run(MultiTest.java:193)
[stress.process.out] at javasoft.sqe.javatest.lib.MultiTest.run(MultiTest.java:125)
[stress.process.out] at javasoft.sqe.tests.api.java.util.concurrent.ExchangerTest.main(ExchangerTest.java:27)
[stress.process.out] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[stress.process.out] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
[stress.process.out] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[stress.process.out] at java.base/java.lang.reflect.Method.invoke(Method.java:568)
[stress.process.out] at applications.kitchensink.process.stress.modules.JckStressModule$TestRunner$1.run(JckStressModule.java:275)
[stress.process.out] testExchange: Failed. Test case throws exception: java.lang.NullPointerException: Cannot invoke "String.startsWith(String)" because the return value of "java.lang.management.ThreadInfo.getLockName()" is null
[stress.process.out] testSpliterator_characteristics: Passed. OKAY
[stress.process.out] testSpliterator_getComparator: Passed. OKAY
[stress.process.out] testNanoTime: Failed. tearDown failed: java.lang.NullPointerException: Cannot invoke "String.startsWith(String)" because the return value of "java.lang.management.ThreadInfo.getLockName()" is null
[stress.process.out] testCallable3: Passed. OKAY
[stress.process.out] testCallableNPE1: Passed. OKAY
[stress.process.out] testNewCachedThreadPool1: Passed. OKAY
[stress.process.out] testNewSingleThreadExecutor3: Passed. OKAY
[stress.process.out] testPrivilegedCallableWithPrivs: Passed. OKAY
[stress.process.out] testNewScheduledThreadPool: Passed. OKAY
[stress.process.out] testTimedCallable: Passed. OKAY
[stress.process.out] testCallable1: Passed. OKAY
[stress.process.out] testCallableNPE4: Passed. OKAY
[stress.process.out] testCallableNPE3: Passed. OKAY
[stress.process.out] testCallable4: Passed. OKAY
[stress.process.out] testCallable2: Passed. OKAY
[stress.process.out] testCallableNPE2: Passed. OKAY
[stress.process.out] testCreatePrivilegedCallableUsingCCLWithNoPrivs: Failed. tearDown failed: java.lang.NullPointerException: Cannot invoke "String.startsWith(String)" because the return value of "java.lang.management.ThreadInfo.getLockName()" is null
[stress.process.out] testUnconfigurableScheduledExecutorServiceNPE: Failed. tearDown failed: java.lang.NullPointerException: Cannot invoke "String.startsWith(String)" because the return value of "java.lang.management.ThreadInfo.getLockName()" is null
[stress.process.out] testNewFixedThreadPool4: Passed. OKAY
[stress.process.out] testNewSingleThreadScheduledExecutor: Passed. OKAY
[stress.process.out] testUnconfigurableExecutorServiceNPE: Passed. OKAY
[stress.process.out] testPrivilegedCallableUsingCCLWithPrivs: Passed. OKAY
[stress.process.out] java.lang.NullPointerException: Cannot invoke "String.startsWith(String)" because the return value of "java.lang.management.ThreadInfo.getLockName()" is null
[stress.process.out] at javasoft.sqe.tests.api.java.util.concurrent.JSR166TestCase.dumpTestThreads(JSR166TestCase.java:659)
[stress.process.out] at javasoft.sqe.tests.api.java.util.concurrent.JSR166TestCase.threadRecordFailure(JSR166TestCase.java:320)
[stress.process.out] at javasoft.sqe.tests.api.java.util.concurrent.JSR166TestCase.threadUnexpectedException(JSR166TestCase.java:510)
[stress.process.out] at javasoft.sqe.tests.api.java.util.concurrent.JSR166TestCase.await(JSR166TestCase.java:1217)
[stress.process.out] at javasoft.sqe.tests.api.java.util.concurrent.JSR166TestCase.await(JSR166TestCase.java:1222)
[stress.process.out] at javasoft.sqe.tests.api.java.util.concurrent.ExecutorsTest.testDefaultThreadFactory(ExecutorsTest.java:332)
[stress.process.out] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[stress.process.out] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
[stress.process.out] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[stress.process.out] at java.base/java.lang.reflect.Method.invoke(Method.java:568)
[stress.process.out] at javasoft.sqe.tests.api.junit.TestCase.invokeTestCase(TestCase.java:50)
[stress.process.out] at javasoft.sqe.javatest.lib.MultiTest.run(MultiTest.java:193)
[stress.process.out] at javasoft.sqe.javatest.lib.MultiTest.run(MultiTest.java:125)
[stress.process.out] at javasoft.sqe.tests.api.java.util.concurrent.ExecutorsTest.main(ExecutorsTest.java:38)
[stress.process.out] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[stress.process.out] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
[stress.process.out] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[stress.process.out] at java.base/java.lang.reflect.Method.invoke(Method.java:568)
[stress.process.out] at applications.kitchensink.process.stress.modules.JckStressModule$TestRunner$1.run(JckStressModule.java:275)
[stress.process.out] testTwoParties: Passed. OKAY
[stress.process.out] testResetAfterCommandException: Passed. OKAY
[stress.process.out] testMoreTasksThanParties: Passed. OKAY
[stress.process.out] testAwait5_Timeout_BrokenBarrier: Passed. OKAY
[stress.process.out] testReset_NoBrokenBarrier: Passed. OKAY
[stress.process.out] testConstructor2: Passed. OKAY
[stress.process.out] testConstructor1: Passed. OKAY
[stress.process.out] testAwait2_Interrupted_BrokenBarrier: Passed. OKAY
[stress.process.out] testAwait1_Interrupted_BrokenBarrier: Passed. OKAY
[stress.process.out] testReset_Leakage: Passed. OKAY
[stress.process.out] testGetParties: Passed. OKAY
[stress.process.out] testSingleParty: Passed. OKAY
[stress.process.out] testBarrierAction: Passed. OKAY
[stress.process.out] testResetAfterTimeout: Passed. OKAY
[stress.process.out] testAwait3_TimeoutException: Passed. OKAY
[stress.process.out] testAwait4_Timeout_BrokenBarrier: Passed. OKAY
[stress.process.out] testReset_BrokenBarrier: Passed. OKAY
[stress.process.out] testResetAfterInterrupt: Failed. tearDown failed: java.lang.NullPointerException: Cannot invoke "String.startsWith(String)" because the return value of "java.lang.management.ThreadInfo.getLockName()" is null
[stress.process.out] java.lang.NullPointerException: Cannot invoke "String.startsWith(String)" because the return value of "java.lang.management.ThreadInfo.getLockName()" is null
[stress.process.out] at javasoft.sqe.tests.api.java.util.concurrent.JSR166TestCase.dumpTestThreads(JSR166TestCase.java:659)
[stress.process.out] at javasoft.sqe.tests.api.java.util.concurrent.JSR166TestCase.threadRecordFailure(JSR166TestCase.java:320)
[stress.process.out] at javasoft.sqe.tests.api.java.util.concurrent.JSR166TestCase.threadFail(JSR166TestCase.java:399)
[stress.process.out] at javasoft.sqe.tests.api.java.util.concurrent.JSR166TestCase.awaitTermination(JSR166TestCase.java:1045)
[stress.process.out] at javasoft.sqe.tests.api.java.util.concurrent.JSR166TestCase.awaitTermination(JSR166TestCase.java:1056)
[stress.process.out] at javasoft.sqe.tests.api.java.util.concurrent.CyclicBarrierTest.testResetWithoutBreakage(CyclicBarrierTest.java:382)
[stress.process.out] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[stress.process.out] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
[stress.process.out] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[stress.process.out] at java.base/java.lang.reflect.Method.invoke(Method.java:568)
[stress.process.out] at javasoft.sqe.tests.api.junit.TestCase.invokeTestCase(TestCase.java:50)
[stress.process.out] at javasoft.sqe.javatest.lib.MultiTest.run(MultiTest.java:193)
[stress.process.out] at javasoft.sqe.javatest.lib.MultiTest.run(MultiTest.java:125)
[stress.process.out] at javasoft.sqe.tests.api.java.util.concurrent.CyclicBarrierTest.main(CyclicBarrierTest.java:33)
[stress.process.out] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[stress.process.out] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
[stress.process.out] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[stress.process.out] at java.base/java.lang.reflect.Method.invoke(Method.java:568)
[stress.process.out] at applications.kitchensink.process.stress.modules.JckStressModule$TestRunner$1.run(JckStressModule.java:275)
[stress.process.out] testResetWithoutBreakage: Failed. Test case throws exception: java.lang.NullPointerException: Cannot invoke "String.startsWith(String)" because the return value of "java.lang.management.ThreadInfo.getLockName()" is null
[stress.process.out] testGetAndSetDefaultUncaughtExceptionHandler: Failed. tearDown failed: java.lang.NullPointerException: Cannot invoke "String.startsWith(String)" because the return value of "java.lang.management.ThreadInfo.getLockName()" is null
[stress.process.out] testGetAndSetUncaughtExceptionHandler: Failed. tearDown failed: java.lang.NullPointerException: Cannot invoke "String.startsWith(String)" because the return value of "java.lang.management.ThreadInfo.getLockName()" is null
[stress.process.out] testDefaultThreadFactory: Failed. Test case throws exception: java.lang.NullPointerException: Cannot invoke "String.startsWith(String)" because the return value of "java.lang.management.ThreadInfo.getLockName()" is null
[stress.process.out] java.lang.NullPointerException: Cannot invoke "String.startsWith(String)" because the return value of "java.lang.management.ThreadInfo.getLockName()" is null
[stress.process.out] at javasoft.sqe.tests.api.java.util.concurrent.JSR166TestCase.dumpTestThreads(JSR166TestCase.java:659)
[stress.process.out] at javasoft.sqe.tests.api.java.util.concurrent.JSR166TestCase.threadRecordFailure(JSR166TestCase.java:320)
[stress.process.out] at javasoft.sqe.tests.api.java.util.concurrent.JSR166TestCase.threadUnexpectedException(JSR166TestCase.java:510)
[stress.process.out] at javasoft.sqe.tests.api.java.util.concurrent.JSR166TestCase$CheckedRunnable.run(JSR166TestCase.java:1068)
[stress.process.out] at javasoft.sqe.tests.api.java.util.concurrent.JSR166TestCase.runWithSecurityManagerWithPermissions(JSR166TestCase.java:816)
[stress.process.out] at javasoft.sqe.tests.api.java.util.concurrent.JSR166TestCase.runWithPermissions(JSR166TestCase.java:788)
[stress.process.out] at javasoft.sqe.tests.api.java.util.concurrent.JSR166TestCase.runWithoutPermissions(JSR166TestCase.java:828)
[stress.process.out] at javasoft.sqe.tests.api.java.util.concurrent.ExecutorsTest.testPrivilegedCallableWithNoPrivs(ExecutorsTest.java:455)
[stress.process.out] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[stress.process.out] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
[stress.process.out] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[stress.process.out] at java.base/java.lang.reflect.Method.invoke(Method.java:568)
[stress.process.out] at javasoft.sqe.tests.api.junit.TestCase.invokeTestCase(TestCase.java:50)
[stress.process.out] at javasoft.sqe.javatest.lib.MultiTest.run(MultiTest.java:193)
[stress.process.out] at javasoft.sqe.javatest.lib.MultiTest.run(MultiTest.java:125)
[stress.process.out] at javasoft.sqe.tests.api.java.util.concurrent.ExecutorsTest.main(ExecutorsTest.java:38)
[stress.process.out] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[stress.process.out] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
[stress.process.out] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[stress.process.out] at java.base/java.lang.reflect.Method.invoke(Method.java:568)
[stress.process.out] at applications.kitchensink.process.stress.modules.JckStressModule$TestRunner$1.run(JckStressModule.java:275)
[stress.process.out] #
[stress.process.out] # A fatal error has been detected by the Java Runtime Environment:
[stress.process.out] #
[stress.process.out] # EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00007ffbc228d1d7, pid=49332, tid=9016
[stress.process.out] #
[stress.process.out] # JRE version: Java(TM) SE Runtime Environment (18.0+5) (build 18-ea+5-146)
[stress.process.out] # Java VM: Java HotSpot(TM) 64-Bit Server VM (18-ea+5-146, mixed mode, sharing, tiered, compressed oops, compressed class ptrs, g1 gc, windows-amd64)
[stress.process.out] # Problematic frame:
[stress.process.out] # V [jvm.dll+0x38d1d7] java_lang_Thread::get_thread_status+0x7
[stress.process.out] #
[stress.process.out] # No core dump will be written. Minidumps are not enabled by default on client versions of Windows
[stress.process.out] #
[stress.process.out] # JFR recording file will be written. Location: T:\\testoutput\\test-support\\jtreg_closed_test_hotspot_jtreg_applications_runthese_RunThese24H_java\\scratch\\0\\hs_err_pid49332.jfr
[stress.process.out] #
[stress.process.out] Unsupported internal testing APIs have been used.
[stress.process.out]
[stress.process.out] # An error report file with more information is saved as:
[stress.process.out] # T:\\testoutput\\test-support\\jtreg_closed_test_hotspot_jtreg_applications_runthese_RunThese24H_java\\scratch\\0\\hs_err_pid49332.log
Please note that the test was reporting NULL return values from
java.lang.management.ThreadInfo.getLockName() before the
EXCEPTION_ACCESS_VIOLATION crash. It is possible that the
code that is calling ThreadInfo.getLockName() is not properly coded
to handle NULL return values. ThreadInfo.getLockName() is racy
with respect to thread exit so it is possible for the target thread to
exit while the ThreadInfo.getLockName() query is running. In that
case, the API is supposed to return NULL.
Here's the crashing thread's stack:
--------------- T H R E A D ---------------
Current thread (0x000001c75b74c810): VMThread "VM Thread" [stack: 0x0000000f91400000,0x0000000f91500000] [id=9016]
Stack: [0x0000000f91400000,0x0000000f91500000], sp=0x0000000f914ff0e8, free space=1020k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [jvm.dll+0x38d1d7] java_lang_Thread::get_thread_status+0x7 (javaClasses.cpp:1836)
siginfo: EXCEPTION_ACCESS_VIOLATION (0xc0000005), reading address 0x0000000000000028
It's the VM thread that's crashing here. I suspect a NULL ptr
has been passed in via some API. The VMThread usually
protects itself against such things so I'm not sure what
happened here.