[crac] RFR: Remove code trigger register during checkpointRestore
joeylee
duke at openjdk.org
Thu May 25 07:41:07 UTC 2023
Register higher priority context during checkpoint could lead to dead lock, this patch removes the code that triggers register during checkpoint call.
Thread dump for `CracOptionTest` without this patch
2023-05-23 18:10:39
Full thread dump OpenJDK 64-Bit Server VM (17-internal+0-adhoc.ubuntu.jdk mixed mode, sharing):
Threads class SMR info:
_java_thread_list=0x00007f30a8002610, length=13, elements={
0x00007f30ec025690, 0x00007f30ec0b3d30, 0x00007f30ec0b5ae0, 0x00007f30ec0baa40,
0x00007f30ec0bbdf0, 0x00007f30ec0bd200, 0x00007f30ec0bebb0, 0x00007f30ec0c00e0,
0x00007f30ec0c1550, 0x00007f30ec0c9350, 0x00007f30ec0cc3d0, 0x00007f30ec0e5c20,
0x00007f30a8001650
}
"main" #1 prio=5 os_prio=0 cpu=2.19ms elapsed=12.30s tid=0x00007f30ec025690 nid=0x69b0 in Object.wait() [0x00007f30f392f000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(java.base at 17-internal/Native Method)
- waiting on <0x00000000ca413e78> (a jdk.internal.crac.JDKContext)
at java.lang.Object.wait(java.base at 17-internal/Object.java:338)
at jdk.crac.impl.AbstractContextImpl.waitWhileCheckpointIsInProgress(java.base at 17-internal/AbstractContextImpl.java:102)
at jdk.crac.impl.PriorityContext.register(java.base at 17-internal/PriorityContext.java:44)
- locked <0x00000000ca413e78> (a jdk.internal.crac.JDKContext)
at jdk.internal.crac.JDKContext.register(java.base at 17-internal/JDKContext.java:108)
at jdk.internal.ref.CleanerImpl$PhantomCleanableRef.<init>(java.base at 17-internal/CleanerImpl.java:173)
at java.lang.invoke.MethodHandleNatives$CallSiteContext.make(java.base at 17-internal/MethodHandleNatives.java:93)
at java.lang.invoke.CallSite.<init>(java.base at 17-internal/CallSite.java:144)
at java.lang.invoke.ConstantCallSite.<init>(java.base at 17-internal/ConstantCallSite.java:50)
at java.lang.invoke.InnerClassLambdaMetafactory.buildCallSite(java.base at 17-internal/InnerClassLambdaMetafactory.java:262)
at java.lang.invoke.LambdaMetafactory.metafactory(java.base at 17-internal/LambdaMetafactory.java:341)
at java.lang.invoke.DirectMethodHandle$Holder.invokeStatic(java.base at 17-internal/DirectMethodHandle$Holder)
at java.lang.invoke.Invokers$Holder.invokeExact_MT(java.base at 17-internal/Invokers$Holder)
at java.lang.invoke.BootstrapMethodInvoker.invoke(java.base at 17-internal/BootstrapMethodInvoker.java:134)
at java.lang.invoke.CallSite.makeSite(java.base at 17-internal/CallSite.java:315)
at java.lang.invoke.MethodHandleNatives.linkCallSiteImpl(java.base at 17-internal/MethodHandleNatives.java:285)
at java.lang.invoke.MethodHandleNatives.linkCallSite(java.base at 17-internal/MethodHandleNatives.java:275)
at jdk.crac.Core.checkpointRestore1(java.base at 17-internal/Core.java:176)
at jdk.crac.Core.checkpointRestore(java.base at 17-internal/Core.java:264)
- locked <0x00000000ca413f00> (a java.lang.Object)
at jdk.crac.Core.checkpointRestore(java.base at 17-internal/Core.java:249)
at FileWatcherAfterRestoreTest.exec(FileWatcherAfterRestoreTest.java:89)
at jdk.test.lib.crac.CracTest.run(CracTest.java:157)
at jdk.test.lib.crac.CracTest.main(CracTest.java:89)
"Reference Handler" #2 daemon prio=10 os_prio=0 cpu=0.07ms elapsed=12.28s tid=0x00007f30ec0b3d30 nid=0x69b8 waiting on condition [0x00007f30deefc000]
java.lang.Thread.State: RUNNABLE
at java.lang.ref.Reference.waitForReferencePendingList(java.base at 17-internal/Native Method)
at java.lang.ref.Reference.processPendingReferences(java.base at 17-internal/Reference.java:258)
at java.lang.ref.Reference$ReferenceHandler.run(java.base at 17-internal/Reference.java:218)
"Finalizer" #3 daemon prio=8 os_prio=0 cpu=0.09ms elapsed=12.28s tid=0x00007f30ec0b5ae0 nid=0x69b9 in Object.wait() [0x00007f30dedfb000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(java.base at 17-internal/Native Method)
- waiting on <0x00000000ca4143f8> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(java.base at 17-internal/ReferenceQueue.java:155)
- locked <0x00000000ca4143f8> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(java.base at 17-internal/ReferenceQueue.java:176)
at java.lang.ref.Finalizer$FinalizerThread.run(java.base at 17-internal/Finalizer.java:172)
"Signal Dispatcher" #4 daemon prio=9 os_prio=0 cpu=0.37ms elapsed=12.28s tid=0x00007f30ec0baa40 nid=0x69ba waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"Service Thread" #5 daemon prio=9 os_prio=0 cpu=0.06ms elapsed=12.28s tid=0x00007f30ec0bbdf0 nid=0x69bb runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"Monitor Deflation Thread" #6 daemon prio=9 os_prio=0 cpu=0.26ms elapsed=12.28s tid=0x00007f30ec0bd200 nid=0x69bc runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"C2 CompilerThread0" #7 daemon prio=9 os_prio=0 cpu=0.12ms elapsed=12.28s tid=0x00007f30ec0bebb0 nid=0x69bd waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
No compile task
"C1 CompilerThread0" #8 daemon prio=9 os_prio=0 cpu=2.12ms elapsed=12.28s tid=0x00007f30ec0c00e0 nid=0x69be waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
No compile task
"Sweeper thread" #9 daemon prio=9 os_prio=0 cpu=0.07ms elapsed=12.28s tid=0x00007f30ec0c1550 nid=0x69bf runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"Notification Thread" #10 daemon prio=9 os_prio=0 cpu=0.06ms elapsed=12.27s tid=0x00007f30ec0c9350 nid=0x69c0 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"Common-Cleaner" #11 daemon prio=8 os_prio=0 cpu=0.08ms elapsed=12.27s tid=0x00007f30ec0cc3d0 nid=0x69c2 in Object.wait() [0x00007f30de2b7000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(java.base at 17-internal/Native Method)
- waiting on <0x00000000ca428060> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(java.base at 17-internal/ReferenceQueue.java:155)
- locked <0x00000000ca428060> (a java.lang.ref.ReferenceQueue$Lock)
at jdk.internal.ref.CleanerImpl.run(java.base at 17-internal/CleanerImpl.java:144)
at java.lang.Thread.run(java.base at 17-internal/Thread.java:833)
at jdk.internal.misc.InnocuousThread.run(java.base at 17-internal/InnocuousThread.java:162)
"FileSystemWatchService" #12 daemon prio=5 os_prio=0 cpu=0.06ms elapsed=12.25s tid=0x00007f30ec0e5c20 nid=0x69c3 in Object.wait() [0x00007f30ddd8d000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(java.base at 17-internal/Native Method)
- waiting on <0x00000000ca43abb8> (a sun.nio.fs.LinuxWatchService$Poller)
at java.lang.Object.wait(java.base at 17-internal/Object.java:338)
at sun.nio.fs.LinuxWatchService$Poller.processCheckpointRestore(java.base at 17-internal/LinuxWatchService.java:233)
- locked <0x00000000ca43abb8> (a sun.nio.fs.LinuxWatchService$Poller)
at sun.nio.fs.LinuxWatchService$Poller.run(java.base at 17-internal/LinuxWatchService.java:369)
at java.lang.Thread.run(java.base at 17-internal/Thread.java:833)
"Attach Listener" #13 daemon prio=9 os_prio=0 cpu=0.21ms elapsed=0.10s tid=0x00007f30a8001650 nid=0x6a13 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"VM Thread" os_prio=0 cpu=1.99ms elapsed=12.28s tid=0x00007f30ec0afe10 nid=0x69b7 runnable
"GC Thread#0" os_prio=0 cpu=1.21ms elapsed=12.29s tid=0x00007f30ec050f80 nid=0x69b2 runnable
"GC Thread#1" os_prio=0 cpu=0.41ms elapsed=12.21s tid=0x00007f30ac000f70 nid=0x69c4 runnable
"G1 Main Marker" os_prio=0 cpu=0.27ms elapsed=12.29s tid=0x00007f30ec0590d0 nid=0x69b3 runnable
"G1 Conc#0" os_prio=0 cpu=6.10ms elapsed=12.29s tid=0x00007f30ec05a030 nid=0x69b4 runnable
"G1 Refine#0" os_prio=0 cpu=0.08ms elapsed=12.29s tid=0x00007f30ec0874e0 nid=0x69b5 runnable
"G1 Service" os_prio=0 cpu=1.24ms elapsed=12.29s tid=0x00007f30ec0883d0 nid=0x69b6 runnable
"VM Periodic Task Thread" os_prio=0 cpu=4.56ms elapsed=12.27s tid=0x00007f30ec0cac90 nid=0x69c1 waiting on condition
JNI global refs: 7, weak refs: 0
-------------
Commit messages:
- Remove code trigger register during checkpointRestore
Changes: https://git.openjdk.org/crac/pull/75/files
Webrev: https://webrevs.openjdk.org/?repo=crac&pr=75&range=00
Stats: 79 lines in 2 files changed: 75 ins; 0 del; 4 mod
Patch: https://git.openjdk.org/crac/pull/75.diff
Fetch: git fetch https://git.openjdk.org/crac.git pull/75/head:pull/75
PR: https://git.openjdk.org/crac/pull/75
More information about the crac-dev
mailing list