com-lihaoyi / mill

Your shiny new Java/Scala build tool!
https://mill-build.com/
MIT License
2k stars 308 forks source link

BSP: importing occasionally gets stuck: mill seems deadlocked #3100

Closed pieter-bos closed 2 weeks ago

pieter-bos commented 4 months ago

Importing our project via BSP seems to get stuck. Various tasks like "sources", "dependency sources" etc. sometimes stay running forever, then gets killed by IntelliJ after 10 minutes. I'd say this happens about 60% of the time, varying by machine / the weather.

Inspecting the mill process with VisualVM reports there is a deadlock:

(Full Thread Dump) ``` 2024-03-22 16:57:55 Full thread dump OpenJDK 64-Bit Server VM (18.0.2-ea+9-Ubuntu-2 mixed mode, sharing): Threads class SMR info: _java_thread_list=0x00007f8680011b80, length=30, elements={ 0x00007f870c014ec0, 0x00007f870c120aa0, 0x00007f870c121f40, 0x00007f870c129010, 0x00007f870c12a3b0, 0x00007f870c12b7b0, 0x00007f870c12d1d0, 0x00007f870c12e6f0, 0x00007f870c12fb50, 0x00007f870c147060, 0x00007f870c14ada0, 0x00007f870c14bd30, 0x00007f870c14fdf0, 0x00007f870c62ed10, 0x00007f870c6316a0, 0x00007f870c9df190, 0x00007f8628003ee0, 0x00007f865c084c60, 0x00007f865c085d80, 0x00007f865c0873f0, 0x00007f86bc000fe0, 0x00007f86603d0cb0, 0x00007f8660155830, 0x00007f866028b030, 0x00007f8624081460, 0x00007f860000dd00, 0x00007f860001d600, 0x00007f86a8026a20, 0x00007f8624081c30, 0x00007f8680011150 } "main" #1 prio=5 os_prio=0 cpu=3574,17ms elapsed=194,62s tid=0x00007f870c014ec0 nid=107718 waiting on condition [0x00007f8714bfa000] java.lang.Thread.State: WAITING (parking) at jdk.internal.misc.Unsafe.park(java.base@18.0.2-ea/Native Method) - parking to wait for <0x0000000084c00000> (a scala.concurrent.impl.CompletionLatch) at java.util.concurrent.locks.LockSupport.park(java.base@18.0.2-ea/LockSupport.java:211) at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(java.base@18.0.2-ea/AbstractQueuedSynchronizer.java:715) at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(java.base@18.0.2-ea/AbstractQueuedSynchronizer.java:1047) at scala.concurrent.impl.Promise$DefaultPromise.tryAwait0(Promise.scala:243) at scala.concurrent.impl.Promise$DefaultPromise.result(Promise.scala:261) at scala.concurrent.Await$.$anonfun$result$1(package.scala:201) at scala.concurrent.Await$$$Lambda$947/0x0000000800f3c2c0.apply(Unknown Source) at scala.concurrent.BlockContext$DefaultBlockContext$.blockOn(BlockContext.scala:62) at scala.concurrent.Await$.result(package.scala:124) at mill.bsp.worker.BspWorkerImpl$$anon$2.runSession(BspWorkerImpl.scala:71) at mill.bsp.BSP$.$anonfun$startSession$2(BSP.scala:55) at mill.bsp.BSP$$$Lambda$1578/0x0000000801037590.apply(Unknown Source) at mill.api.Result$.create(Result.scala:20) at mill.bsp.BSP$.$anonfun$startSession$1(BSP.scala:53) at mill.bsp.BSP$$$Lambda$1576/0x00000008010357c8.apply(Unknown Source) at mill.define.Task$TraverseCtx.evaluate(Task.scala:71) at mill.eval.GroupEvaluator.$anonfun$evaluateGroup$11(GroupEvaluator.scala:356) at mill.eval.GroupEvaluator$$Lambda$828/0x0000000800ee7790.apply(Unknown Source) at scala.util.DynamicVariable.withValue(DynamicVariable.scala:59) at scala.Console$.withErr(Console.scala:193) at mill.api.SystemStreams$.$anonfun$withStreams$2(SystemStreams.scala:62) at mill.api.SystemStreams$$$Lambda$28/0x0000000800cec4f0.apply(Unknown Source) at scala.util.DynamicVariable.withValue(DynamicVariable.scala:59) at scala.Console$.withOut(Console.scala:164) at mill.api.SystemStreams$.$anonfun$withStreams$1(SystemStreams.scala:61) at mill.api.SystemStreams$$$Lambda$27/0x0000000800cec248.apply(Unknown Source) at scala.util.DynamicVariable.withValue(DynamicVariable.scala:59) at scala.Console$.withIn(Console.scala:227) at mill.api.SystemStreams$.withStreams(SystemStreams.scala:60) at mill.eval.GroupEvaluator.$anonfun$evaluateGroup$8(GroupEvaluator.scala:356) at mill.eval.GroupEvaluator.$anonfun$evaluateGroup$8$adapted(GroupEvaluator.scala:325) at mill.eval.GroupEvaluator$$Lambda$826/0x0000000800ee6038.apply(Unknown Source) at scala.collection.immutable.Vector.foreach(Vector.scala:2124) at mill.eval.GroupEvaluator.computeAll$1(GroupEvaluator.scala:325) at mill.eval.GroupEvaluator.evaluateGroup(GroupEvaluator.scala:380) at mill.eval.GroupEvaluator.$anonfun$evaluateGroupCached$22(GroupEvaluator.scala:247) at mill.eval.GroupEvaluator$$Lambda$817/0x0000000800edeae8.apply(Unknown Source) at scala.util.DynamicVariable.withValue(DynamicVariable.scala:59) at mill.eval.GroupEvaluator.$anonfun$evaluateGroupCached$2(GroupEvaluator.scala:238) at mill.eval.GroupEvaluator$$Lambda$776/0x0000000800ecdf60.apply(Unknown Source) at mill.eval.GroupEvaluator$synchronizedEval$.$anonfun$apply$1(GroupEvaluator.scala:65) at mill.eval.GroupEvaluator$synchronizedEval$$$Lambda$778/0x0000000800ece8d8.apply(Unknown Source) at scala.util.Using$.resource(Using.scala:262) at mill.eval.GroupEvaluator$synchronizedEval$.apply(GroupEvaluator.scala:64) at mill.eval.GroupEvaluator.evaluateGroupCached(GroupEvaluator.scala:83) at mill.eval.GroupEvaluator.evaluateGroupCached$(GroupEvaluator.scala:71) at mill.eval.EvaluatorImpl.evaluateGroupCached(EvaluatorImpl.scala:15) at mill.eval.EvaluatorCore.$anonfun$evaluate0$2(EvaluatorCore.scala:116) at mill.eval.EvaluatorCore$$Lambda$772/0x0000000800ecc790.apply(Unknown Source) at scala.concurrent.impl.Promise$Transformation.run(Promise.scala:467) at mill.eval.ExecutionContexts$RunNow$.execute(ExecutionContexts.scala:14) at scala.concurrent.impl.Promise$Transformation.submitWithValue(Promise.scala:429) at scala.concurrent.impl.Promise$DefaultPromise.submitWithValue(Promise.scala:338) at scala.concurrent.impl.Promise$DefaultPromise.dispatchOrAddCallbacks(Promise.scala:312) at scala.concurrent.impl.Promise$DefaultPromise.map(Promise.scala:182) at mill.eval.EvaluatorCore.$anonfun$evaluate0$1(EvaluatorCore.scala:92) at mill.eval.EvaluatorCore.$anonfun$evaluate0$1$adapted(EvaluatorCore.scala:90) at mill.eval.EvaluatorCore$$Lambda$763/0x0000000800ec4c58.apply(Unknown Source) at scala.collection.immutable.Vector.foreach(Vector.scala:2124) at mill.eval.EvaluatorCore.evaluate0(EvaluatorCore.scala:90) at mill.eval.EvaluatorCore.$anonfun$evaluate$1(EvaluatorCore.scala:43) at mill.eval.EvaluatorCore$$Lambda$737/0x0000000800eb33e0.apply(Unknown Source) at scala.util.DynamicVariable.withValue(DynamicVariable.scala:59) at mill.eval.EvaluatorCore.evaluate(EvaluatorCore.scala:34) at mill.eval.EvaluatorCore.evaluate$(EvaluatorCore.scala:26) at mill.eval.EvaluatorImpl.evaluate(EvaluatorImpl.scala:15) at mill.main.RunScript$.evaluateNamed(RunScript.scala:38) at mill.main.RunScript$.$anonfun$evaluateTasksNamed$2(RunScript.scala:26) at mill.main.RunScript$$$Lambda$734/0x0000000800eb0ec8.apply(Unknown Source) at scala.util.Either.map(Either.scala:382) at mill.main.RunScript$.evaluateTasksNamed(RunScript.scala:26) at mill.runner.MillBuildBootstrap$.evaluateWithWatches(MillBuildBootstrap.scala:399) at mill.runner.MillBuildBootstrap.$anonfun$processFinalTargets$3(MillBuildBootstrap.scala:308) at mill.runner.MillBuildBootstrap$$Lambda$1553/0x0000000800f935c8.apply(Unknown Source) at scala.util.DynamicVariable.withValue(DynamicVariable.scala:59) at mill.runner.MillBuildBootstrap.processFinalTargets(MillBuildBootstrap.scala:308) at mill.runner.MillBuildBootstrap.evaluateRec(MillBuildBootstrap.scala:196) at mill.runner.MillBuildBootstrap.$anonfun$evaluate$1(MillBuildBootstrap.scala:49) at mill.runner.MillBuildBootstrap$$Lambda$191/0x0000000800dcb430.apply(Unknown Source) at scala.util.DynamicVariable.withValue(DynamicVariable.scala:59) at mill.runner.MillBuildBootstrap.evaluate(MillBuildBootstrap.scala:48) at mill.runner.MillMain$.$anonfun$main0$6(MillMain.scala:234) at mill.runner.MillMain$$$Lambda$163/0x0000000800d85b28.apply(Unknown Source) at mill.runner.Watching$.watchLoop(Watching.scala:27) at mill.runner.MillMain$.$anonfun$main0$1(MillMain.scala:219) at mill.runner.MillMain$$$Lambda$26/0x0000000800ce75a8.apply(Unknown Source) at scala.util.DynamicVariable.withValue(DynamicVariable.scala:59) at scala.Console$.withErr(Console.scala:193) at mill.api.SystemStreams$.$anonfun$withStreams$2(SystemStreams.scala:62) at mill.api.SystemStreams$$$Lambda$28/0x0000000800cec4f0.apply(Unknown Source) at scala.util.DynamicVariable.withValue(DynamicVariable.scala:59) at scala.Console$.withOut(Console.scala:164) at mill.api.SystemStreams$.$anonfun$withStreams$1(SystemStreams.scala:61) at mill.api.SystemStreams$$$Lambda$27/0x0000000800cec248.apply(Unknown Source) at scala.util.DynamicVariable.withValue(DynamicVariable.scala:59) at scala.Console$.withIn(Console.scala:227) at mill.api.SystemStreams$.withStreams(SystemStreams.scala:60) at mill.runner.MillMain$.main0(MillMain.scala:101) at mill.runner.MillMain$.liftedTree1$1(MillMain.scala:78) at mill.runner.MillMain$.main(MillMain.scala:69) at mill.runner.MillMain.main(MillMain.scala) at java.lang.invoke.LambdaForm$DMH/0x0000000800c08000.invokeStatic(java.base@18.0.2-ea/LambdaForm$DMH) at java.lang.invoke.LambdaForm$MH/0x0000000800c09400.invoke(java.base@18.0.2-ea/LambdaForm$MH) at java.lang.invoke.Invokers$Holder.invokeExact_MT(java.base@18.0.2-ea/Invokers$Holder) at jdk.internal.reflect.DirectMethodHandleAccessor.invokeImpl(java.base@18.0.2-ea/DirectMethodHandleAccessor.java:155) at jdk.internal.reflect.DirectMethodHandleAccessor.invoke(java.base@18.0.2-ea/DirectMethodHandleAccessor.java:104) at java.lang.reflect.Method.invoke(java.base@18.0.2-ea/Method.java:577) at mill.main.client.IsolatedMillMainLoader.runMain(IsolatedMillMainLoader.java:58) at mill.main.client.MillClientMain.main(MillClientMain.java:78) Locked ownable synchronizers: - None "Reference Handler" #2 daemon prio=10 os_prio=0 cpu=1,92ms elapsed=194,62s tid=0x00007f870c120aa0 nid=107725 waiting on condition [0x00007f86e1ffe000] java.lang.Thread.State: RUNNABLE at java.lang.ref.Reference.waitForReferencePendingList(java.base@18.0.2-ea/Native Method) at java.lang.ref.Reference.processPendingReferences(java.base@18.0.2-ea/Reference.java:253) at java.lang.ref.Reference$ReferenceHandler.run(java.base@18.0.2-ea/Reference.java:215) Locked ownable synchronizers: - None "Finalizer" #3 daemon prio=8 os_prio=0 cpu=0,21ms elapsed=194,62s tid=0x00007f870c121f40 nid=107726 in Object.wait() [0x00007f86cfffe000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(java.base@18.0.2-ea/Native Method) - waiting on <0x0000000080300af8> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(java.base@18.0.2-ea/ReferenceQueue.java:155) - locked <0x0000000080300af8> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(java.base@18.0.2-ea/ReferenceQueue.java:176) at java.lang.ref.Finalizer$FinalizerThread.run(java.base@18.0.2-ea/Finalizer.java:183) Locked ownable synchronizers: - None "Signal Dispatcher" #4 daemon prio=9 os_prio=0 cpu=0,37ms elapsed=194,61s tid=0x00007f870c129010 nid=107727 waiting on condition [0x0000000000000000] java.lang.Thread.State: RUNNABLE Locked ownable synchronizers: - None "Service Thread" #5 daemon prio=9 os_prio=0 cpu=1,80ms elapsed=194,61s tid=0x00007f870c12a3b0 nid=107728 runnable [0x0000000000000000] java.lang.Thread.State: RUNNABLE Locked ownable synchronizers: - None "Monitor Deflation Thread" #6 daemon prio=9 os_prio=0 cpu=4,46ms elapsed=194,61s tid=0x00007f870c12b7b0 nid=107729 runnable [0x0000000000000000] java.lang.Thread.State: RUNNABLE Locked ownable synchronizers: - None "C2 CompilerThread0" #7 daemon prio=9 os_prio=0 cpu=2765,60ms elapsed=194,61s tid=0x00007f870c12d1d0 nid=107730 waiting on condition [0x0000000000000000] java.lang.Thread.State: RUNNABLE No compile task Locked ownable synchronizers: - None "C1 CompilerThread0" #15 daemon prio=9 os_prio=0 cpu=1142,85ms elapsed=194,61s tid=0x00007f870c12e6f0 nid=107731 waiting on condition [0x0000000000000000] java.lang.Thread.State: RUNNABLE No compile task Locked ownable synchronizers: - None "Sweeper thread" #19 daemon prio=9 os_prio=0 cpu=47,90ms elapsed=194,61s tid=0x00007f870c12fb50 nid=107732 runnable [0x0000000000000000] java.lang.Thread.State: RUNNABLE Locked ownable synchronizers: - None "JDWP Transport Listener: dt_socket" #20 daemon prio=10 os_prio=0 cpu=0,13ms elapsed=194,60s tid=0x00007f870c147060 nid=107733 runnable [0x0000000000000000] java.lang.Thread.State: RUNNABLE Locked ownable synchronizers: - None "JDWP Event Helper Thread" #21 daemon prio=10 os_prio=0 cpu=0,06ms elapsed=194,60s tid=0x00007f870c14ada0 nid=107734 runnable [0x0000000000000000] java.lang.Thread.State: RUNNABLE Locked ownable synchronizers: - None "Notification Thread" #22 daemon prio=9 os_prio=0 cpu=0,03ms elapsed=194,60s tid=0x00007f870c14bd30 nid=107735 runnable [0x0000000000000000] java.lang.Thread.State: RUNNABLE Locked ownable synchronizers: - None "Common-Cleaner" #23 daemon prio=8 os_prio=0 cpu=1,77ms elapsed=194,60s tid=0x00007f870c14fdf0 nid=107737 in Object.wait() [0x00007f868fffe000] java.lang.Thread.State: TIMED_WAITING (on object monitor) at java.lang.Object.wait(java.base@18.0.2-ea/Native Method) - waiting on <0x0000000080301480> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(java.base@18.0.2-ea/ReferenceQueue.java:155) - locked <0x0000000080301480> (a java.lang.ref.ReferenceQueue$Lock) at jdk.internal.ref.CleanerImpl.run(java.base@18.0.2-ea/CleanerImpl.java:140) at java.lang.Thread.run(java.base@18.0.2-ea/Thread.java:833) at jdk.internal.misc.InnocuousThread.run(java.base@18.0.2-ea/InnocuousThread.java:162) Locked ownable synchronizers: - None "pool-1-thread-1" #25 prio=5 os_prio=0 cpu=153,29ms elapsed=193,76s tid=0x00007f870c62ed10 nid=107748 runnable [0x00007f8667ffe000] java.lang.Thread.State: RUNNABLE at java.io.FileInputStream.readBytes(java.base@18.0.2-ea/Native Method) at java.io.FileInputStream.read(java.base@18.0.2-ea/Unknown Source) at java.io.BufferedInputStream.fill(java.base@18.0.2-ea/BufferedInputStream.java:244) at java.io.BufferedInputStream.read(java.base@18.0.2-ea/BufferedInputStream.java:263) - locked <0x0000000080301cd8> (a java.io.BufferedInputStream) at org.eclipse.lsp4j.jsonrpc.json.StreamMessageProducer.listen(StreamMessageProducer.java:79) at org.eclipse.lsp4j.jsonrpc.json.ConcurrentMessageProcessor.run(ConcurrentMessageProcessor.java:113) at java.util.concurrent.Executors$RunnableAdapter.call(java.base@18.0.2-ea/Executors.java:539) at java.util.concurrent.FutureTask.run(java.base@18.0.2-ea/FutureTask.java:264) at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@18.0.2-ea/ThreadPoolExecutor.java:1136) at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@18.0.2-ea/ThreadPoolExecutor.java:635) at java.lang.Thread.run(java.base@18.0.2-ea/Thread.java:833) Locked ownable synchronizers: - <0x0000000080612a80> (a java.util.concurrent.ThreadPoolExecutor$Worker) "Thread-0" #26 prio=5 os_prio=0 cpu=0,46ms elapsed=193,76s tid=0x00007f870c6316a0 nid=107749 waiting on condition [0x00007f8665ffe000] java.lang.Thread.State: WAITING (parking) at jdk.internal.misc.Unsafe.park(java.base@18.0.2-ea/Native Method) - parking to wait for <0x0000000080600170> (a java.util.concurrent.FutureTask) at java.util.concurrent.locks.LockSupport.park(java.base@18.0.2-ea/LockSupport.java:211) at java.util.concurrent.FutureTask.awaitDone(java.base@18.0.2-ea/FutureTask.java:447) at java.util.concurrent.FutureTask.get(java.base@18.0.2-ea/FutureTask.java:190) at org.eclipse.lsp4j.jsonrpc.json.ConcurrentMessageProcessor$1.get(ConcurrentMessageProcessor.java:54) at org.eclipse.lsp4j.jsonrpc.json.ConcurrentMessageProcessor$1.get(ConcurrentMessageProcessor.java:50) at mill.bsp.worker.BspWorkerImpl.$anonfun$startBspServer$2(BspWorkerImpl.scala:86) at mill.bsp.worker.BspWorkerImpl$$Lambda$160/0x0000000800d9f518.run(Unknown Source) at java.lang.Thread.run(java.base@18.0.2-ea/Thread.java:833) Locked ownable synchronizers: - None "scala-execution-context-global-27" #27 daemon prio=5 os_prio=0 cpu=21,22ms elapsed=192,28s tid=0x00007f870c9df190 nid=107767 waiting for monitor entry [0x00007f8633ffc000] java.lang.Thread.State: BLOCKED (on object monitor) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:9) - parking to wait for <0x00000000806c37b0> (a scala.concurrent.impl.ExecutionContextImpl$$anon$3) - waiting to lock <0x0000000084c9e350> (a millbuild.build$viper$silicon$buildInfo$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at mill.scalalib.JavaModule.transitiveIvyDeps(JavaModule.scala:259) at mill.scalalib.JavaModule.transitiveIvyDeps$(JavaModule.scala:259) at millbuild.build$viper$silicon$buildInfo$.transitiveIvyDeps(build.sc:104) at mill.scalalib.JavaModule.$anonfun$transitiveIvyDeps$2(JavaModule.scala:261) at mill.scalalib.JavaModule$$Lambda$621/0x0000000800e8f288.apply(Unknown Source) at scala.collection.immutable.List.map(List.scala:250) at scala.collection.immutable.List.map(List.scala:79) at mill.define.Target$.traverse(Task.scala:330) at mill.scalalib.JavaModule.$anonfun$transitiveIvyDeps$1(JavaModule.scala:261) at mill.scalalib.JavaModule$$Lambda$602/0x0000000800e8a2f8.apply(Unknown Source) at scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:469) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:10) - locked <0x0000000084c9cdc8> (a millbuild.build$viper$silicon$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at mill.scalalib.JavaModule.transitiveIvyDeps(JavaModule.scala:259) at mill.scalalib.JavaModule.transitiveIvyDeps$(JavaModule.scala:259) at millbuild.build$viper$silicon$.transitiveIvyDeps(build.sc:103) at mill.scalalib.JavaModule.$anonfun$transitiveIvyDeps$2(JavaModule.scala:261) at mill.scalalib.JavaModule$$Lambda$621/0x0000000800e8f288.apply(Unknown Source) at scala.collection.immutable.List.map(List.scala:250) at scala.collection.immutable.List.map(List.scala:79) at mill.define.Target$.traverse(Task.scala:330) at mill.scalalib.JavaModule.$anonfun$transitiveIvyDeps$1(JavaModule.scala:261) at mill.scalalib.JavaModule$$Lambda$602/0x0000000800e8a2f8.apply(Unknown Source) at scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:469) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:10) - locked <0x0000000084c99ed0> (a millbuild.build$viper$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at mill.scalalib.JavaModule.transitiveIvyDeps(JavaModule.scala:259) at mill.scalalib.JavaModule.transitiveIvyDeps$(JavaModule.scala:259) at millbuild.build$viper$.transitiveIvyDeps(build.sc:59) at mill.scalalib.JavaModule.$anonfun$transitiveIvyDeps$2(JavaModule.scala:261) at mill.scalalib.JavaModule$$Lambda$621/0x0000000800e8f288.apply(Unknown Source) at scala.collection.immutable.List.map(List.scala:250) at scala.collection.immutable.List.map(List.scala:79) at mill.define.Target$.traverse(Task.scala:330) at mill.scalalib.JavaModule.$anonfun$transitiveIvyDeps$1(JavaModule.scala:261) at mill.scalalib.JavaModule$$Lambda$602/0x0000000800e8a2f8.apply(Unknown Source) at scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:469) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:10) - locked <0x0000000084ca7848> (a millbuild.build$vercors$viperApi$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at mill.scalalib.JavaModule.transitiveIvyDeps(JavaModule.scala:259) at mill.scalalib.JavaModule.transitiveIvyDeps$(JavaModule.scala:259) at millbuild.build$vercors$viperApi$.transitiveIvyDeps(build.sc:524) at mill.bsp.worker.MillBuildServer.$anonfun$buildTargetDependencySources$2(MillBuildServer.scala:346) at mill.bsp.worker.MillBuildServer$$Lambda$1648/0x00000008010559e8.apply(Unknown Source) at mill.bsp.worker.MillBuildServer.$anonfun$completableTasks$2(MillBuildServer.scala:657) at mill.bsp.worker.MillBuildServer$$Lambda$1606/0x0000000801048950.apply(Unknown Source) at scala.collection.immutable.List.map(List.scala:250) at scala.collection.immutable.List.map(List.scala:79) at mill.bsp.worker.MillBuildServer.$anonfun$completableTasks$1(MillBuildServer.scala:655) at mill.bsp.worker.MillBuildServer$$Lambda$210/0x0000000800de6ff0.apply(Unknown Source) at mill.bsp.worker.MillBuildServer.$anonfun$completable$1(MillBuildServer.scala:699) at mill.bsp.worker.MillBuildServer.$anonfun$completable$1$adapted(MillBuildServer.scala:696) at mill.bsp.worker.MillBuildServer$$Lambda$212/0x0000000800de73a8.apply(Unknown Source) at scala.concurrent.impl.Promise$Transformation.run(Promise.scala:484) at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(java.base@18.0.2-ea/ForkJoinTask.java:1395) at java.util.concurrent.ForkJoinTask.doExec(java.base@18.0.2-ea/ForkJoinTask.java:373) at java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(java.base@18.0.2-ea/ForkJoinPool.java:1182) at java.util.concurrent.ForkJoinPool.scan(java.base@18.0.2-ea/ForkJoinPool.java:1655) at java.util.concurrent.ForkJoinPool.runWorker(java.base@18.0.2-ea/ForkJoinPool.java:1622) at java.util.concurrent.ForkJoinWorkerThread.run(java.base@18.0.2-ea/ForkJoinWorkerThread.java:165) Locked ownable synchronizers: - None "scala-execution-context-global-28" #28 daemon prio=5 os_prio=0 cpu=1131,66ms elapsed=192,27s tid=0x00007f8628003ee0 nid=107768 waiting for monitor entry [0x00007f8631ffd000] java.lang.Thread.State: BLOCKED (on object monitor) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:9) - parking to wait for <0x00000000806c37b0> (a scala.concurrent.impl.ExecutionContextImpl$$anon$3) - waiting to lock <0x0000000084c99ed0> (a millbuild.build$viper$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at mill.scalalib.JavaModule.sources(JavaModule.scala:343) at mill.scalalib.JavaModule.sources$(JavaModule.scala:343) at millbuild.build$viper$.sources(build.sc:59) at mill.bsp.worker.MillBuildServer.$anonfun$buildTargetSources$2(MillBuildServer.scala:297) at mill.bsp.worker.MillBuildServer$$Lambda$1642/0x0000000801054ed0.apply(Unknown Source) at mill.bsp.worker.MillBuildServer.$anonfun$completableTasks$2(MillBuildServer.scala:657) at mill.bsp.worker.MillBuildServer$$Lambda$1606/0x0000000801048950.apply(Unknown Source) at scala.collection.immutable.List.map(List.scala:250) at scala.collection.immutable.List.map(List.scala:79) at mill.bsp.worker.MillBuildServer.$anonfun$completableTasks$1(MillBuildServer.scala:655) at mill.bsp.worker.MillBuildServer$$Lambda$210/0x0000000800de6ff0.apply(Unknown Source) at mill.bsp.worker.MillBuildServer.$anonfun$completable$1(MillBuildServer.scala:699) at mill.bsp.worker.MillBuildServer.$anonfun$completable$1$adapted(MillBuildServer.scala:696) at mill.bsp.worker.MillBuildServer$$Lambda$212/0x0000000800de73a8.apply(Unknown Source) at scala.concurrent.impl.Promise$Transformation.run(Promise.scala:484) at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(java.base@18.0.2-ea/ForkJoinTask.java:1395) at java.util.concurrent.ForkJoinTask.doExec(java.base@18.0.2-ea/ForkJoinTask.java:373) at java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(java.base@18.0.2-ea/ForkJoinPool.java:1182) at java.util.concurrent.ForkJoinPool.scan(java.base@18.0.2-ea/ForkJoinPool.java:1655) at java.util.concurrent.ForkJoinPool.runWorker(java.base@18.0.2-ea/ForkJoinPool.java:1622) at java.util.concurrent.ForkJoinWorkerThread.run(java.base@18.0.2-ea/ForkJoinWorkerThread.java:165) Locked ownable synchronizers: - None "scala-execution-context-global-29" #29 daemon prio=5 os_prio=0 cpu=29,28ms elapsed=189,39s tid=0x00007f865c084c60 nid=107789 waiting for monitor entry [0x00007f860fffc000] java.lang.Thread.State: BLOCKED (on object monitor) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:9) - waiting to lock <0x0000000084c9cdc8> (a millbuild.build$viper$silicon$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at millbuild.build$viper$silicon$.scalaVersion(build.sc:104) at millbuild.build$viper$silicon$buildInfo$.$anonfun$buildInfoMembers$1(build.sc:89) at millbuild.build$viper$silicon$buildInfo$$$Lambda$1871/0x000000080109a3c8.apply(Unknown Source) at scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:469) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:10) - locked <0x0000000084c9e350> (a millbuild.build$viper$silicon$buildInfo$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at millbuild.build$viper$silicon$buildInfo$.buildInfoMembers(build.sc:85) at mill.contrib.buildinfo.BuildInfo.$anonfun$buildInfoResources$1(BuildInfo.scala:44) at mill.contrib.buildinfo.BuildInfo$$Lambda$1803/0x0000000801087838.apply(Unknown Source) at scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:469) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:10) - locked <0x0000000084c9e350> (a millbuild.build$viper$silicon$buildInfo$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at mill.contrib.buildinfo.BuildInfo.buildInfoResources(BuildInfo.scala:42) at mill.contrib.buildinfo.BuildInfo.buildInfoResources$(BuildInfo.scala:42) at millbuild.build$viper$silicon$buildInfo$.buildInfoResources(build.sc:104) at mill.contrib.buildinfo.BuildInfo.$anonfun$resources$1(BuildInfo.scala:40) at mill.contrib.buildinfo.BuildInfo$$Lambda$1800/0x0000000801086d58.apply(Unknown Source) at scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:469) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:10) - locked <0x0000000084c9e350> (a millbuild.build$viper$silicon$buildInfo$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at mill.contrib.buildinfo.BuildInfo.resources(BuildInfo.scala:40) at mill.contrib.buildinfo.BuildInfo.resources$(BuildInfo.scala:38) at millbuild.build$viper$silicon$buildInfo$.resources(build.sc:104) at mill.bsp.worker.MillBuildServer.$anonfun$buildTargetResources$2(MillBuildServer.scala:404) at mill.bsp.worker.MillBuildServer$$Lambda$1661/0x0000000801056730.apply(Unknown Source) at mill.bsp.worker.MillBuildServer.$anonfun$completableTasks$2(MillBuildServer.scala:657) at mill.bsp.worker.MillBuildServer$$Lambda$1606/0x0000000801048950.apply(Unknown Source) at scala.collection.immutable.List.map(List.scala:250) at scala.collection.immutable.List.map(List.scala:79) at mill.bsp.worker.MillBuildServer.$anonfun$completableTasks$1(MillBuildServer.scala:655) at mill.bsp.worker.MillBuildServer$$Lambda$210/0x0000000800de6ff0.apply(Unknown Source) at mill.bsp.worker.MillBuildServer.$anonfun$completable$1(MillBuildServer.scala:699) at mill.bsp.worker.MillBuildServer.$anonfun$completable$1$adapted(MillBuildServer.scala:696) at mill.bsp.worker.MillBuildServer$$Lambda$212/0x0000000800de73a8.apply(Unknown Source) at scala.concurrent.impl.Promise$Transformation.run(Promise.scala:484) at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(java.base@18.0.2-ea/ForkJoinTask.java:1395) at java.util.concurrent.ForkJoinTask.doExec(java.base@18.0.2-ea/ForkJoinTask.java:373) at java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(java.base@18.0.2-ea/ForkJoinPool.java:1182) at java.util.concurrent.ForkJoinPool.scan(java.base@18.0.2-ea/ForkJoinPool.java:1655) at java.util.concurrent.ForkJoinPool.runWorker(java.base@18.0.2-ea/ForkJoinPool.java:1622) at java.util.concurrent.ForkJoinWorkerThread.run(java.base@18.0.2-ea/ForkJoinWorkerThread.java:165) Locked ownable synchronizers: - None "scala-execution-context-global-30" #30 daemon prio=5 os_prio=0 cpu=8,48ms elapsed=189,39s tid=0x00007f865c085d80 nid=107790 waiting on condition [0x00007f860dffe000] java.lang.Thread.State: WAITING (parking) at jdk.internal.misc.Unsafe.park(java.base@18.0.2-ea/Native Method) - parking to wait for <0x00000000806c37b0> (a scala.concurrent.impl.ExecutionContextImpl$$anon$3) at java.util.concurrent.locks.LockSupport.park(java.base@18.0.2-ea/LockSupport.java:341) at java.util.concurrent.ForkJoinPool.awaitWork(java.base@18.0.2-ea/ForkJoinPool.java:1724) at java.util.concurrent.ForkJoinPool.runWorker(java.base@18.0.2-ea/ForkJoinPool.java:1623) at java.util.concurrent.ForkJoinWorkerThread.run(java.base@18.0.2-ea/ForkJoinWorkerThread.java:165) Locked ownable synchronizers: - None "scala-execution-context-global-31" #31 daemon prio=5 os_prio=0 cpu=20,97ms elapsed=189,38s tid=0x00007f865c0873f0 nid=107791 waiting for monitor entry [0x00007f860bffd000] java.lang.Thread.State: BLOCKED (on object monitor) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:9) - waiting to lock <0x0000000084ca7848> (a millbuild.build$vercors$viperApi$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at mill.scalalib.ScalaModule.compile(ScalaModule.scala:280) at mill.scalalib.ScalaModule.compile$(ScalaModule.scala:280) at millbuild.build$vercors$viperApi$.compile(build.sc:524) at mill.scalalib.ScalaModule.bspCompileClassesPath(ScalaModule.scala:308) at mill.scalalib.ScalaModule.bspCompileClassesPath$(ScalaModule.scala:307) at millbuild.build$vercors$viperApi$.bspCompileClassesPath(build.sc:524) at mill.bsp.worker.MillScalaBuildServer.$anonfun$buildTargetScalacOptions$2(MillScalaBuildServer.scala:39) at mill.bsp.worker.MillScalaBuildServer$$Lambda$1685/0x00000008010649e0.apply(Unknown Source) at mill.bsp.worker.MillBuildServer.$anonfun$completableTasks$2(MillBuildServer.scala:657) at mill.bsp.worker.MillBuildServer$$Lambda$1606/0x0000000801048950.apply(Unknown Source) at scala.collection.immutable.List.map(List.scala:250) at scala.collection.immutable.List.map(List.scala:79) at mill.bsp.worker.MillBuildServer.$anonfun$completableTasks$1(MillBuildServer.scala:655) at mill.bsp.worker.MillBuildServer$$Lambda$210/0x0000000800de6ff0.apply(Unknown Source) at mill.bsp.worker.MillBuildServer.$anonfun$completable$1(MillBuildServer.scala:699) at mill.bsp.worker.MillBuildServer.$anonfun$completable$1$adapted(MillBuildServer.scala:696) at mill.bsp.worker.MillBuildServer$$Lambda$212/0x0000000800de73a8.apply(Unknown Source) at scala.concurrent.impl.Promise$Transformation.run(Promise.scala:484) at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(java.base@18.0.2-ea/ForkJoinTask.java:1395) at java.util.concurrent.ForkJoinTask.doExec(java.base@18.0.2-ea/ForkJoinTask.java:373) at java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(java.base@18.0.2-ea/ForkJoinPool.java:1182) at java.util.concurrent.ForkJoinPool.scan(java.base@18.0.2-ea/ForkJoinPool.java:1655) at java.util.concurrent.ForkJoinPool.runWorker(java.base@18.0.2-ea/ForkJoinPool.java:1622) at java.util.concurrent.ForkJoinWorkerThread.run(java.base@18.0.2-ea/ForkJoinWorkerThread.java:165) Locked ownable synchronizers: - None "Attach Listener" #32 daemon prio=9 os_prio=0 cpu=224,96ms elapsed=18,70s tid=0x00007f86bc000fe0 nid=108441 waiting on condition [0x0000000000000000] java.lang.Thread.State: RUNNABLE Locked ownable synchronizers: - None "JFR Recorder Thread" #33 daemon prio=5 os_prio=0 cpu=0,15ms elapsed=18,59s tid=0x00007f86603d0cb0 nid=108442 runnable [0x0000000000000000] java.lang.Thread.State: RUNNABLE Locked ownable synchronizers: - None "JFR Periodic Tasks" #34 daemon prio=9 os_prio=0 cpu=69,99ms elapsed=18,42s tid=0x00007f8660155830 nid=108449 in Object.wait() [0x00007f8605ffe000] java.lang.Thread.State: TIMED_WAITING (on object monitor) at java.lang.Object.wait(java.base@18.0.2-ea/Native Method) - waiting on at jdk.jfr.internal.PlatformRecorder.takeNap(jdk.jfr@18.0.2-ea/PlatformRecorder.java:526) - locked <0x0000000085907e60> (a java.lang.Object) at jdk.jfr.internal.PlatformRecorder.periodicTask(jdk.jfr@18.0.2-ea/PlatformRecorder.java:507) at jdk.jfr.internal.PlatformRecorder.lambda$startDiskMonitor$1(jdk.jfr@18.0.2-ea/PlatformRecorder.java:447) at jdk.jfr.internal.PlatformRecorder$$Lambda$1911/0x0000000800d71020.run(jdk.jfr@18.0.2-ea/Unknown Source) at java.lang.Thread.run(java.base@18.0.2-ea/Thread.java:833) Locked ownable synchronizers: - None "RMI TCP Accept-0" #36 daemon prio=9 os_prio=0 cpu=1,11ms elapsed=4,41s tid=0x00007f866028b030 nid=108496 runnable [0x00007f85ffffe000] java.lang.Thread.State: RUNNABLE at sun.nio.ch.Net.accept(java.base@18.0.2-ea/Native Method) at sun.nio.ch.NioSocketImpl.accept(java.base@18.0.2-ea/NioSocketImpl.java:752) at java.net.ServerSocket.implAccept(java.base@18.0.2-ea/ServerSocket.java:673) at java.net.ServerSocket.platformImplAccept(java.base@18.0.2-ea/ServerSocket.java:639) at java.net.ServerSocket.implAccept(java.base@18.0.2-ea/ServerSocket.java:615) at java.net.ServerSocket.implAccept(java.base@18.0.2-ea/ServerSocket.java:572) at java.net.ServerSocket.accept(java.base@18.0.2-ea/ServerSocket.java:530) at sun.management.jmxremote.LocalRMIServerSocketFactory$1.accept(jdk.management.agent@18.0.2-ea/LocalRMIServerSocketFactory.java:52) at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.executeAcceptLoop(java.rmi@18.0.2-ea/TCPTransport.java:424) at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.run(java.rmi@18.0.2-ea/TCPTransport.java:388) at java.lang.Thread.run(java.base@18.0.2-ea/Thread.java:833) Locked ownable synchronizers: - <0x0000000084472b58> (a java.util.concurrent.locks.ReentrantLock$NonfairSync) "RMI TCP Connection(1)-127.0.0.1" #37 daemon prio=9 os_prio=0 cpu=101,58ms elapsed=4,40s tid=0x00007f8624081460 nid=108498 runnable [0x00007f85fdffd000] java.lang.Thread.State: RUNNABLE at sun.nio.ch.Net.poll(java.base@18.0.2-ea/Native Method) at sun.nio.ch.NioSocketImpl.park(java.base@18.0.2-ea/NioSocketImpl.java:178) at sun.nio.ch.NioSocketImpl.timedRead(java.base@18.0.2-ea/NioSocketImpl.java:282) at sun.nio.ch.NioSocketImpl.implRead(java.base@18.0.2-ea/NioSocketImpl.java:306) at sun.nio.ch.NioSocketImpl.read(java.base@18.0.2-ea/NioSocketImpl.java:347) at sun.nio.ch.NioSocketImpl$1.read(java.base@18.0.2-ea/NioSocketImpl.java:800) at java.net.Socket$SocketInputStream.read(java.base@18.0.2-ea/Socket.java:966) at java.io.BufferedInputStream.fill(java.base@18.0.2-ea/BufferedInputStream.java:244) at java.io.BufferedInputStream.read(java.base@18.0.2-ea/BufferedInputStream.java:263) - locked <0x000000008436b910> (a java.io.BufferedInputStream) at java.io.FilterInputStream.read(java.base@18.0.2-ea/FilterInputStream.java:79) at sun.rmi.transport.tcp.TCPTransport.handleMessages(java.rmi@18.0.2-ea/TCPTransport.java:580) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(java.rmi@18.0.2-ea/TCPTransport.java:844) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(java.rmi@18.0.2-ea/TCPTransport.java:721) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler$$Lambda$1982/0x000000080110afb8.run(java.rmi@18.0.2-ea/Unknown Source) at java.security.AccessController.executePrivileged(java.base@18.0.2-ea/AccessController.java:776) at java.security.AccessController.doPrivileged(java.base@18.0.2-ea/AccessController.java:399) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(java.rmi@18.0.2-ea/TCPTransport.java:720) at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@18.0.2-ea/ThreadPoolExecutor.java:1136) at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@18.0.2-ea/ThreadPoolExecutor.java:635) at java.lang.Thread.run(java.base@18.0.2-ea/Thread.java:833) Locked ownable synchronizers: - <0x0000000084492a58> (a java.util.concurrent.locks.ReentrantLock$NonfairSync) - <0x0000000084493068> (a java.util.concurrent.ThreadPoolExecutor$Worker) "RMI Scheduler(0)" #38 daemon prio=9 os_prio=0 cpu=0,38ms elapsed=4,39s tid=0x00007f860000dd00 nid=108499 waiting on condition [0x00007f85f7ffe000] java.lang.Thread.State: TIMED_WAITING (parking) at jdk.internal.misc.Unsafe.park(java.base@18.0.2-ea/Native Method) - parking to wait for <0x000000008446bec8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) at java.util.concurrent.locks.LockSupport.parkNanos(java.base@18.0.2-ea/LockSupport.java:252) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(java.base@18.0.2-ea/AbstractQueuedSynchronizer.java:1672) at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@18.0.2-ea/ScheduledThreadPoolExecutor.java:1182) at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@18.0.2-ea/ScheduledThreadPoolExecutor.java:899) at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@18.0.2-ea/ThreadPoolExecutor.java:1062) at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@18.0.2-ea/ThreadPoolExecutor.java:1122) at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@18.0.2-ea/ThreadPoolExecutor.java:635) at java.lang.Thread.run(java.base@18.0.2-ea/Thread.java:833) Locked ownable synchronizers: - None "JMX server connection timeout 39" #39 daemon prio=9 os_prio=0 cpu=5,17ms elapsed=4,39s tid=0x00007f860001d600 nid=108500 in Object.wait() [0x00007f85f5ffe000] java.lang.Thread.State: TIMED_WAITING (on object monitor) at java.lang.Object.wait(java.base@18.0.2-ea/Native Method) - waiting on at com.sun.jmx.remote.internal.ServerCommunicatorAdmin$Timeout.run(java.management@18.0.2-ea/ServerCommunicatorAdmin.java:171) - locked <0x00000000843b3670> (a [I) at java.lang.Thread.run(java.base@18.0.2-ea/Thread.java:833) Locked ownable synchronizers: - None "C1 CompilerThread1" #16 daemon prio=9 os_prio=0 cpu=15,71ms elapsed=3,31s tid=0x00007f86a8026a20 nid=108506 waiting on condition [0x0000000000000000] java.lang.Thread.State: RUNNABLE No compile task Locked ownable synchronizers: - None "RMI TCP Connection(2)-127.0.0.1" #40 daemon prio=9 os_prio=0 cpu=1,43ms elapsed=1,33s tid=0x00007f8624081c30 nid=108508 runnable [0x00007f85efffd000] java.lang.Thread.State: RUNNABLE at sun.nio.ch.Net.poll(java.base@18.0.2-ea/Native Method) at sun.nio.ch.NioSocketImpl.park(java.base@18.0.2-ea/NioSocketImpl.java:178) at sun.nio.ch.NioSocketImpl.timedRead(java.base@18.0.2-ea/NioSocketImpl.java:282) at sun.nio.ch.NioSocketImpl.implRead(java.base@18.0.2-ea/NioSocketImpl.java:306) at sun.nio.ch.NioSocketImpl.read(java.base@18.0.2-ea/NioSocketImpl.java:347) at sun.nio.ch.NioSocketImpl$1.read(java.base@18.0.2-ea/NioSocketImpl.java:800) at java.net.Socket$SocketInputStream.read(java.base@18.0.2-ea/Socket.java:966) at java.io.BufferedInputStream.fill(java.base@18.0.2-ea/BufferedInputStream.java:244) at java.io.BufferedInputStream.read(java.base@18.0.2-ea/BufferedInputStream.java:263) - locked <0x0000000083f92818> (a java.io.BufferedInputStream) at java.io.FilterInputStream.read(java.base@18.0.2-ea/FilterInputStream.java:79) at sun.rmi.transport.tcp.TCPTransport.handleMessages(java.rmi@18.0.2-ea/TCPTransport.java:580) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(java.rmi@18.0.2-ea/TCPTransport.java:844) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(java.rmi@18.0.2-ea/TCPTransport.java:721) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler$$Lambda$1982/0x000000080110afb8.run(java.rmi@18.0.2-ea/Unknown Source) at java.security.AccessController.executePrivileged(java.base@18.0.2-ea/AccessController.java:776) at java.security.AccessController.doPrivileged(java.base@18.0.2-ea/AccessController.java:399) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(java.rmi@18.0.2-ea/TCPTransport.java:720) at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@18.0.2-ea/ThreadPoolExecutor.java:1136) at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@18.0.2-ea/ThreadPoolExecutor.java:635) at java.lang.Thread.run(java.base@18.0.2-ea/Thread.java:833) Locked ownable synchronizers: - <0x0000000084493408> (a java.util.concurrent.locks.ReentrantLock$NonfairSync) - <0x0000000084493670> (a java.util.concurrent.ThreadPoolExecutor$Worker) "C2 CompilerThread1" #8 daemon prio=9 os_prio=0 cpu=76,77ms elapsed=0,32s tid=0x00007f8680011150 nid=108509 waiting on condition [0x0000000000000000] java.lang.Thread.State: RUNNABLE No compile task Locked ownable synchronizers: - None "VM Thread" os_prio=0 cpu=75,69ms elapsed=194,62s tid=0x00007f870c11d9f0 nid=107724 runnable "GC Thread#0" os_prio=0 cpu=21,47ms elapsed=194,62s tid=0x00007f870c057da0 nid=107719 runnable "GC Thread#1" os_prio=0 cpu=26,31ms elapsed=193,97s tid=0x00007f86d0008680 nid=107741 runnable "GC Thread#2" os_prio=0 cpu=18,13ms elapsed=193,97s tid=0x00007f86d0008df0 nid=107742 runnable "GC Thread#3" os_prio=0 cpu=19,16ms elapsed=193,97s tid=0x00007f86d0009650 nid=107743 runnable "GC Thread#4" os_prio=0 cpu=26,09ms elapsed=193,97s tid=0x00007f86d000a070 nid=107744 runnable "GC Thread#5" os_prio=0 cpu=14,68ms elapsed=193,96s tid=0x00007f86d00132e0 nid=107745 runnable "GC Thread#6" os_prio=0 cpu=19,08ms elapsed=193,96s tid=0x00007f86d0013d00 nid=107746 runnable "GC Thread#7" os_prio=0 cpu=15,82ms elapsed=193,03s tid=0x00007f86d000d200 nid=107752 runnable "GC Thread#8" os_prio=0 cpu=18,84ms elapsed=193,03s tid=0x00007f86d000dbb0 nid=107753 runnable "GC Thread#9" os_prio=0 cpu=10,31ms elapsed=193,03s tid=0x00007f86d0016ad0 nid=107754 runnable "GC Thread#10" os_prio=0 cpu=17,25ms elapsed=193,03s tid=0x00007f86d00173b0 nid=107755 runnable "GC Thread#11" os_prio=0 cpu=19,21ms elapsed=193,03s tid=0x00007f86d0017df0 nid=107756 runnable "GC Thread#12" os_prio=0 cpu=12,63ms elapsed=192,58s tid=0x00007f86d0012850 nid=107766 runnable "G1 Main Marker" os_prio=0 cpu=0,69ms elapsed=194,62s tid=0x00007f870c0693d0 nid=107720 runnable "G1 Conc#0" os_prio=0 cpu=14,40ms elapsed=194,62s tid=0x00007f870c06a2d0 nid=107721 runnable "G1 Conc#1" os_prio=0 cpu=14,97ms elapsed=193,03s tid=0x00007f86e4000d60 nid=107757 runnable "G1 Conc#2" os_prio=0 cpu=15,17ms elapsed=193,03s tid=0x00007f86e4001790 nid=107758 runnable "G1 Refine#0" os_prio=0 cpu=0,05ms elapsed=194,62s tid=0x00007f870c0efb60 nid=107722 runnable "G1 Service" os_prio=0 cpu=37,93ms elapsed=194,62s tid=0x00007f870c0f0a30 nid=107723 runnable "VM Periodic Task Thread" os_prio=0 cpu=106,46ms elapsed=194,60s tid=0x00007f870c14d660 nid=107736 waiting on condition JNI global refs: 83, weak refs: 1 Found one Java-level deadlock: ============================= "scala-execution-context-global-27": waiting to lock monitor 0x00007f8628008f30 (object 0x0000000084c9e350, a millbuild.build$viper$silicon$buildInfo$), which is held by "scala-execution-context-global-29" "scala-execution-context-global-29": waiting to lock monitor 0x00007f861c006680 (object 0x0000000084c9cdc8, a millbuild.build$viper$silicon$), which is held by "scala-execution-context-global-27" Java stack information for the threads listed above: =================================================== "scala-execution-context-global-27": at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:9) - parking to wait for <0x00000000806c37b0> (a scala.concurrent.impl.ExecutionContextImpl$$anon$3) - waiting to lock <0x0000000084c9e350> (a millbuild.build$viper$silicon$buildInfo$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at mill.scalalib.JavaModule.transitiveIvyDeps(JavaModule.scala:259) at mill.scalalib.JavaModule.transitiveIvyDeps$(JavaModule.scala:259) at millbuild.build$viper$silicon$buildInfo$.transitiveIvyDeps(build.sc:104) at mill.scalalib.JavaModule.$anonfun$transitiveIvyDeps$2(JavaModule.scala:261) at mill.scalalib.JavaModule$$Lambda$621/0x0000000800e8f288.apply(Unknown Source) at scala.collection.immutable.List.map(List.scala:250) at scala.collection.immutable.List.map(List.scala:79) at mill.define.Target$.traverse(Task.scala:330) at mill.scalalib.JavaModule.$anonfun$transitiveIvyDeps$1(JavaModule.scala:261) at mill.scalalib.JavaModule$$Lambda$602/0x0000000800e8a2f8.apply(Unknown Source) at scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:469) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:10) - locked <0x0000000084c9cdc8> (a millbuild.build$viper$silicon$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at mill.scalalib.JavaModule.transitiveIvyDeps(JavaModule.scala:259) at mill.scalalib.JavaModule.transitiveIvyDeps$(JavaModule.scala:259) at millbuild.build$viper$silicon$.transitiveIvyDeps(build.sc:103) at mill.scalalib.JavaModule.$anonfun$transitiveIvyDeps$2(JavaModule.scala:261) at mill.scalalib.JavaModule$$Lambda$621/0x0000000800e8f288.apply(Unknown Source) at scala.collection.immutable.List.map(List.scala:250) at scala.collection.immutable.List.map(List.scala:79) at mill.define.Target$.traverse(Task.scala:330) at mill.scalalib.JavaModule.$anonfun$transitiveIvyDeps$1(JavaModule.scala:261) at mill.scalalib.JavaModule$$Lambda$602/0x0000000800e8a2f8.apply(Unknown Source) at scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:469) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:10) - locked <0x0000000084c99ed0> (a millbuild.build$viper$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at mill.scalalib.JavaModule.transitiveIvyDeps(JavaModule.scala:259) at mill.scalalib.JavaModule.transitiveIvyDeps$(JavaModule.scala:259) at millbuild.build$viper$.transitiveIvyDeps(build.sc:59) at mill.scalalib.JavaModule.$anonfun$transitiveIvyDeps$2(JavaModule.scala:261) at mill.scalalib.JavaModule$$Lambda$621/0x0000000800e8f288.apply(Unknown Source) at scala.collection.immutable.List.map(List.scala:250) at scala.collection.immutable.List.map(List.scala:79) at mill.define.Target$.traverse(Task.scala:330) at mill.scalalib.JavaModule.$anonfun$transitiveIvyDeps$1(JavaModule.scala:261) at mill.scalalib.JavaModule$$Lambda$602/0x0000000800e8a2f8.apply(Unknown Source) at scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:469) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:10) - locked <0x0000000084ca7848> (a millbuild.build$vercors$viperApi$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at mill.scalalib.JavaModule.transitiveIvyDeps(JavaModule.scala:259) at mill.scalalib.JavaModule.transitiveIvyDeps$(JavaModule.scala:259) at millbuild.build$vercors$viperApi$.transitiveIvyDeps(build.sc:524) at mill.bsp.worker.MillBuildServer.$anonfun$buildTargetDependencySources$2(MillBuildServer.scala:346) at mill.bsp.worker.MillBuildServer$$Lambda$1648/0x00000008010559e8.apply(Unknown Source) at mill.bsp.worker.MillBuildServer.$anonfun$completableTasks$2(MillBuildServer.scala:657) at mill.bsp.worker.MillBuildServer$$Lambda$1606/0x0000000801048950.apply(Unknown Source) at scala.collection.immutable.List.map(List.scala:250) at scala.collection.immutable.List.map(List.scala:79) at mill.bsp.worker.MillBuildServer.$anonfun$completableTasks$1(MillBuildServer.scala:655) at mill.bsp.worker.MillBuildServer$$Lambda$210/0x0000000800de6ff0.apply(Unknown Source) at mill.bsp.worker.MillBuildServer.$anonfun$completable$1(MillBuildServer.scala:699) at mill.bsp.worker.MillBuildServer.$anonfun$completable$1$adapted(MillBuildServer.scala:696) at mill.bsp.worker.MillBuildServer$$Lambda$212/0x0000000800de73a8.apply(Unknown Source) at scala.concurrent.impl.Promise$Transformation.run(Promise.scala:484) at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(java.base@18.0.2-ea/ForkJoinTask.java:1395) at java.util.concurrent.ForkJoinTask.doExec(java.base@18.0.2-ea/ForkJoinTask.java:373) at java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(java.base@18.0.2-ea/ForkJoinPool.java:1182) at java.util.concurrent.ForkJoinPool.scan(java.base@18.0.2-ea/ForkJoinPool.java:1655) at java.util.concurrent.ForkJoinPool.runWorker(java.base@18.0.2-ea/ForkJoinPool.java:1622) at java.util.concurrent.ForkJoinWorkerThread.run(java.base@18.0.2-ea/ForkJoinWorkerThread.java:165) "scala-execution-context-global-29": at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:9) - waiting to lock <0x0000000084c9cdc8> (a millbuild.build$viper$silicon$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at millbuild.build$viper$silicon$.scalaVersion(build.sc:104) at millbuild.build$viper$silicon$buildInfo$.$anonfun$buildInfoMembers$1(build.sc:89) at millbuild.build$viper$silicon$buildInfo$$$Lambda$1871/0x000000080109a3c8.apply(Unknown Source) at scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:469) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:10) - locked <0x0000000084c9e350> (a millbuild.build$viper$silicon$buildInfo$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at millbuild.build$viper$silicon$buildInfo$.buildInfoMembers(build.sc:85) at mill.contrib.buildinfo.BuildInfo.$anonfun$buildInfoResources$1(BuildInfo.scala:44) at mill.contrib.buildinfo.BuildInfo$$Lambda$1803/0x0000000801087838.apply(Unknown Source) at scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:469) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:10) - locked <0x0000000084c9e350> (a millbuild.build$viper$silicon$buildInfo$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at mill.contrib.buildinfo.BuildInfo.buildInfoResources(BuildInfo.scala:42) at mill.contrib.buildinfo.BuildInfo.buildInfoResources$(BuildInfo.scala:42) at millbuild.build$viper$silicon$buildInfo$.buildInfoResources(build.sc:104) at mill.contrib.buildinfo.BuildInfo.$anonfun$resources$1(BuildInfo.scala:40) at mill.contrib.buildinfo.BuildInfo$$Lambda$1800/0x0000000801086d58.apply(Unknown Source) at scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:469) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:10) - locked <0x0000000084c9e350> (a millbuild.build$viper$silicon$buildInfo$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at mill.contrib.buildinfo.BuildInfo.resources(BuildInfo.scala:40) at mill.contrib.buildinfo.BuildInfo.resources$(BuildInfo.scala:38) at millbuild.build$viper$silicon$buildInfo$.resources(build.sc:104) at mill.bsp.worker.MillBuildServer.$anonfun$buildTargetResources$2(MillBuildServer.scala:404) at mill.bsp.worker.MillBuildServer$$Lambda$1661/0x0000000801056730.apply(Unknown Source) at mill.bsp.worker.MillBuildServer.$anonfun$completableTasks$2(MillBuildServer.scala:657) at mill.bsp.worker.MillBuildServer$$Lambda$1606/0x0000000801048950.apply(Unknown Source) at scala.collection.immutable.List.map(List.scala:250) at scala.collection.immutable.List.map(List.scala:79) at mill.bsp.worker.MillBuildServer.$anonfun$completableTasks$1(MillBuildServer.scala:655) at mill.bsp.worker.MillBuildServer$$Lambda$210/0x0000000800de6ff0.apply(Unknown Source) at mill.bsp.worker.MillBuildServer.$anonfun$completable$1(MillBuildServer.scala:699) at mill.bsp.worker.MillBuildServer.$anonfun$completable$1$adapted(MillBuildServer.scala:696) at mill.bsp.worker.MillBuildServer$$Lambda$212/0x0000000800de73a8.apply(Unknown Source) at scala.concurrent.impl.Promise$Transformation.run(Promise.scala:484) at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(java.base@18.0.2-ea/ForkJoinTask.java:1395) at java.util.concurrent.ForkJoinTask.doExec(java.base@18.0.2-ea/ForkJoinTask.java:373) at java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(java.base@18.0.2-ea/ForkJoinPool.java:1182) at java.util.concurrent.ForkJoinPool.scan(java.base@18.0.2-ea/ForkJoinPool.java:1655) at java.util.concurrent.ForkJoinPool.runWorker(java.base@18.0.2-ea/ForkJoinPool.java:1622) at java.util.concurrent.ForkJoinWorkerThread.run(java.base@18.0.2-ea/ForkJoinWorkerThread.java:165) Found 1 deadlock. ```

It reports:

Found one Java-level deadlock:
=============================
"scala-execution-context-global-27":
  waiting to lock monitor 0x00007f8628008f30 (object 0x0000000084c9e350, a millbuild.build$viper$silicon$buildInfo$),
  which is held by "scala-execution-context-global-29"

"scala-execution-context-global-29":
  waiting to lock monitor 0x00007f861c006680 (object 0x0000000084c9cdc8, a millbuild.build$viper$silicon$),
  which is held by "scala-execution-context-global-27"

These threads are rooted in:

respectively, so indeed two different bsp requests. Here are some lines from the dependencySources stack trace from the full report above:

"scala-execution-context-global-27":
        at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:9)
        - parking to wait for  <0x00000000806c37b0> (a scala.concurrent.impl.ExecutionContextImpl$$anon$3)
        - waiting to lock <0x0000000084c9e350> (a millbuild.build$viper$silicon$buildInfo$)
        at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9)
        at mill.define.Module$BaseClass.cachedTarget(Module.scala:58)
        at mill.scalalib.JavaModule.transitiveIvyDeps(JavaModule.scala:259)
        at mill.scalalib.JavaModule.transitiveIvyDeps$(JavaModule.scala:259)
        at millbuild.build$viper$silicon$buildInfo$.transitiveIvyDeps(build.sc:104)
...
        - locked <0x0000000084c9cdc8> (a millbuild.build$viper$silicon$)
        at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9)
...
        at millbuild.build$viper$silicon$.transitiveIvyDeps(build.sc:103)
...
        - locked <0x0000000084c99ed0> (a millbuild.build$viper$)
...
        at millbuild.build$viper$.transitiveIvyDeps(build.sc:59)
...
        - locked <0x0000000084ca7848> (a millbuild.build$vercors$viperApi$)
...
        at millbuild.build$vercors$viperApi$.transitiveIvyDeps(build.sc:524)
...

The other stack trace has a similar sequence of cache misses, and it so happens that the other one locks the viper.silicon.buildInfo module earlier in the stack, and then tries to lock viper.silicon (already locked here). I don't even really understand how it's possible that tasks have cache misses like this after they are ordered, but maybe my mental model is off.

I should say I'm happy to provide build.sc etc. but it's quite large, and I'm having trouble reproducing this outside IntelliJ, or with smaller examples. Maybe you already have some thoughts on the cause, or I can try a bit harder to reduce build.sc, feel free to let me know. Thanks!

lefou commented 4 months ago

Thanks for reporting this. Yeah, a reproducer would be nice, even if it's not small.

My suspicion is that, although the task graph is ordered, there is no guarantee that in two different task graphs all elements are ordered the same.

lefou commented 4 months ago

Besides the BSP client sending requests in parallel, do you also have parallel task processing enabled? I suspect not. It could be that the locked tasks not really depend on each other and that enabling --jobs n with n > 1 works around the locking.

To understand the issue, we should concentrate on the ordering of the task execution plan. I think the ordering of tasks is not total, which means the ordering of task that do not depend on each other is not defined. The deadlock might be obvious, if we could look at the execution plans.

pieter-bos commented 4 months ago

Still posting the stuff below in case I'm wrong, but I just now realized: isn't this stack trace from creating the actual task objects, rather than evaluating any tasks? I can reliably make a deadlock with this example:

import mill._
import scalalib._

object left extends Module {
  def task = T { right.otherTask() }
  def otherTask = T { 0 }
}

object right extends Module {
  def task = T { left.otherTask() }
  def otherTask = T { 0 }
}

object bspDummy1 extends JavaModule {
  def sources = T {
    left.task()
    Seq.empty[PathRef]
  }
}

object bspDummy2 extends JavaModule {
  def resources = T {
    right.task()
    Seq.empty[PathRef]
  }
}

if I manually send buildTarget/sources for bspDummy1 and buildTarget/resosurces for bspDummy2 to a modified mill, that deliberately delays the construction of TargetImpl a bit for the appropriate tasks:

diff --git a/main/define/src/mill/define/Task.scala b/main/define/src/mill/define/Task.scala
index c8c41d746e..338d5b54ce 100644
--- a/main/define/src/mill/define/Task.scala
+++ b/main/define/src/mill/define/Task.scala
@@ -356,16 +356,39 @@ object Target extends Applicative.Applyer[Task, Task, Result, mill.api.Ctx] {

       val lhs = Applicative.impl0[Task, T, mill.api.Ctx](c)(reify(Result.create(t.splice)).tree)

-      mill.moduledefs.Cacher.impl0[Target[T]](c)(
-        reify(
-          new TargetImpl[T](
-            lhs.splice,
-            ctx.splice,
-            rw.splice,
-            taskIsPrivate.splice
+      val taskName = c.enclosingDef.symbol.fullName
+      val slowTaskConstructions = Set(
+        "millbuild.build.right.otherTask",
+        "millbuild.build.left.task",
+        "millbuild.build.left.otherTask",
+        "millbuild.build.right.task",
+      )
+
+      if(slowTaskConstructions.contains(taskName)) {
+        mill.moduledefs.Cacher.impl0[Target[T]](c)(
+          reify({
+            Thread.sleep(500)
+            new TargetImpl[T](
+              lhs.splice,
+              ctx.splice,
+              rw.splice,
+              taskIsPrivate.splice
+            )
+          })
+        )
+      } else {
+        mill.moduledefs.Cacher.impl0[Target[T]](c)(
+          reify(
+            new TargetImpl[T](
+              lhs.splice,
+              ctx.splice,
+              rw.splice,
+              taskIsPrivate.splice
+            )
           )
         )
-      )
+      }
     }

     def targetResultImpl[T: c.WeakTypeTag](c: Context)(t: c.Expr[Result[T]])(

This sequences the construction of task objects such that left.task and right.task wait for each other to start and lock left and right respectively, then try to call right.otherTask, left.otherTask who need to lock right, left respectively. In IntelliJ it gets more complicated because it sends all commands for all targets at once, so you need to consider that bspDummy{1,2} are locked as well, making this scheme less reliable. In any case I think this sufficiently sketches that task construction is not thread safe and/or the module lock (in Cacher.cachedTarget) is too coarse for task construction.

Just my reduced build.sc reply follows here, in case I was incorrect thinking this is about task construction:


I've reduced our build and it still reproduces about 1 in 5 times now, but it no longer needs sources / has long source generation tasks and whatnot, so I'd call it a net win :). This is with .mill-version 0.11.7 but I also tried with 0.11.6 for a bit, so it doesn't seem to matter that much. Just to avoid confusion: I just place this build.sc in a directory, have IntelliJ import it, and click the refresh button until some of the tasks in the IntelliJ dialog seem to run indefinitely. I haven't had to retry more than ~10 times. I've also tried to stabilize the deadlock with some tactical sleep calls but I had no luck.

One example of two task dependency chains (obtained from stack traces) that cause a deadlock in this example now is:

The former locks vercors.main.buildInfo early, then needs vercors.main later, the latter locks vercors.main early, then needs vercors.main.buildInfo later.

Besides the BSP client sending requests in parallel, do you also have parallel task processing enabled? I suspect not. It could be that the locked tasks not really depend on each other and that enabling --jobs n with n > 1 works around the locking.

No, just the default --jobs 1. How do you convince IntelliJ to use that? It seems anytime I install mill-bsp.json with --jobs 0 it does appear, but IntelliJ immediately clobbers that change when I re-import before restarting mill.

build.sc ```scala import $ivy.`com.lihaoyi::mill-contrib-buildinfo:` import os._ import mill._ import scalalib._ import contrib.buildinfo.BuildInfo object viper extends ScalaModule { def scalaVersion = "2.13.12" object silver extends ScalaModule { override def scalaVersion = "2.13.10" } object silicon extends ScalaModule { object buildInfo extends BuildInfo with ScalaModule { def scalaVersion = "2.13.12" def buildInfoPackageName = "viper.silicon" } object common extends ScalaModule { override def scalaVersion = "2.13.10" override def moduleDeps = Seq(silver) } override def scalaVersion = "2.13.10" override def moduleDeps = Seq(silver, common, buildInfo) } object carbon extends ScalaModule { override def scalaVersion = "2.13.10" } override def moduleDeps = Seq(silver, silicon, carbon) } object vercors extends Module { object hre extends ScalaModule { def scalaVersion = "2.13.12" override def moduleDeps = Seq(pprofProto) object pprofProto extends ScalaModule { def scalaVersion = "2.13.12" } } object col extends ScalaModule { def scalaVersion = "2.13.12" override def moduleDeps = Seq(serialize) } object serialize extends ScalaModule{ def scalaVersion = "2.13.12" } object main extends ScalaModule { def scalaVersion = "2.13.12" override def moduleDeps = Seq(col, buildInfo) object buildInfo extends BuildInfo with ScalaModule { def scalaVersion = "2.13.12" def callOrElse(command: Shellable*)(alt: => String): String = try { os.proc(command: _*).call().out.text().trim } catch { case _: SubprocessException => alt } def gitVersionTag = T.input { val tags = callOrElse("sleep", "0.001")("").split("\n") tags.collectFirst { case tag if tag.matches("^v[0-9].*") => tag case "dev-prerelease" => "dev-prerelease" } } def gitVersion = T.input { gitVersionTag() match { case Some(tag) if tag.startsWith("v") => tag.substring(1) case _ => "9999.9.9-SNAPSHOT" } } def buildInfoPackageName = "vct.main" override def buildInfoMembers = T { Seq( BuildInfo.Value("version", gitVersion()), BuildInfo.Value("scalaVersion", main.scalaVersion()), ) } } } } ```
lihaoyi commented 3 months ago

Just hit this as well using IntelliJ import, on Mill's own codebase

``` lihaoyi mill$ jstack 64168 2024-03-27 14:41:34 Full thread dump OpenJDK 64-Bit Server VM (17.0.6+10-LTS mixed mode, sharing): Threads class SMR info: _java_thread_list=0x000060000238b340, length=20, elements={ 0x000000015000d400, 0x0000000133808200, 0x000000015003d600, 0x000000015003ba00, 0x000000015003c000, 0x000000015003c600, 0x000000015003cc00, 0x0000000150041c00, 0x000000015004a200, 0x000000013600c400, 0x000000013600d400, 0x0000000136036400, 0x000000014000aa00, 0x0000000140812e00, 0x0000000132847000, 0x00000001471ef600, 0x0000000141866a00, 0x0000000141867a00, 0x0000000141865c00, 0x00000001506e2800 } "main" #1 prio=5 os_prio=31 cpu=1653.30ms elapsed=603.99s tid=0x000000015000d400 nid=0x2303 waiting on condition [0x000000016b43a000] java.lang.Thread.State: WAITING (parking) at jdk.internal.misc.Unsafe.park(java.base@17.0.6/Native Method) - parking to wait for <0x000000060171dc08> (a scala.concurrent.impl.CompletionLatch) at java.util.concurrent.locks.LockSupport.park(java.base@17.0.6/LockSupport.java:211) at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(java.base@17.0.6/AbstractQueuedSynchronizer.java:715) at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(java.base@17.0.6/AbstractQueuedSynchronizer.java:1047) at scala.concurrent.impl.Promise$DefaultPromise.tryAwait0(Promise.scala:243) at scala.concurrent.impl.Promise$DefaultPromise.result(Promise.scala:261) at scala.concurrent.Await$.$anonfun$result$1(package.scala:201) at scala.concurrent.Await$$$Lambda$965/0x0000000800f51a78.apply(Unknown Source) at scala.concurrent.BlockContext$DefaultBlockContext$.blockOn(BlockContext.scala:62) at scala.concurrent.Await$.result(package.scala:124) at mill.bsp.worker.BspWorkerImpl$$anon$2.runSession(BspWorkerImpl.scala:71) at mill.bsp.BSP$.$anonfun$startSession$2(BSP.scala:55) at mill.bsp.BSP$$$Lambda$2951/0x000000080120a9a0.apply(Unknown Source) at mill.api.Result$.create(Result.scala:20) at mill.bsp.BSP$.$anonfun$startSession$1(BSP.scala:53) at mill.bsp.BSP$$$Lambda$2948/0x0000000801204800.apply(Unknown Source) at mill.define.Task$TraverseCtx.evaluate(Task.scala:71) at mill.eval.GroupEvaluator.$anonfun$evaluateGroup$11(GroupEvaluator.scala:356) at mill.eval.GroupEvaluator$$Lambda$844/0x0000000800efd060.apply(Unknown Source) at scala.util.DynamicVariable.withValue(DynamicVariable.scala:59) at scala.Console$.withErr(Console.scala:193) at mill.api.SystemStreams$.$anonfun$withStreams$2(SystemStreams.scala:62) at mill.api.SystemStreams$$$Lambda$28/0x0000000800ce9350.apply(Unknown Source) at scala.util.DynamicVariable.withValue(DynamicVariable.scala:59) at scala.Console$.withOut(Console.scala:164) at mill.api.SystemStreams$.$anonfun$withStreams$1(SystemStreams.scala:61) at mill.api.SystemStreams$$$Lambda$27/0x0000000800ce9090.apply(Unknown Source) at scala.util.DynamicVariable.withValue(DynamicVariable.scala:59) at scala.Console$.withIn(Console.scala:227) at mill.api.SystemStreams$.withStreams(SystemStreams.scala:60) at mill.eval.GroupEvaluator.$anonfun$evaluateGroup$8(GroupEvaluator.scala:356) at mill.eval.GroupEvaluator.$anonfun$evaluateGroup$8$adapted(GroupEvaluator.scala:325) at mill.eval.GroupEvaluator$$Lambda$842/0x0000000800ef3800.apply(Unknown Source) at scala.collection.immutable.Vector.foreach(Vector.scala:2124) at mill.eval.GroupEvaluator.computeAll$1(GroupEvaluator.scala:325) at mill.eval.GroupEvaluator.evaluateGroup(GroupEvaluator.scala:380) at mill.eval.GroupEvaluator.$anonfun$evaluateGroupCached$22(GroupEvaluator.scala:247) at mill.eval.GroupEvaluator$$Lambda$833/0x0000000800ef4a60.apply(Unknown Source) at scala.util.DynamicVariable.withValue(DynamicVariable.scala:59) at mill.eval.GroupEvaluator.$anonfun$evaluateGroupCached$2(GroupEvaluator.scala:238) at mill.eval.GroupEvaluator$$Lambda$792/0x0000000800eda308.apply(Unknown Source) at mill.eval.GroupEvaluator$synchronizedEval$.$anonfun$apply$1(GroupEvaluator.scala:65) at mill.eval.GroupEvaluator$synchronizedEval$$$Lambda$794/0x0000000800edaad8.apply(Unknown Source) at scala.util.Using$.resource(Using.scala:262) at mill.eval.GroupEvaluator$synchronizedEval$.apply(GroupEvaluator.scala:64) at mill.eval.GroupEvaluator.evaluateGroupCached(GroupEvaluator.scala:83) at mill.eval.GroupEvaluator.evaluateGroupCached$(GroupEvaluator.scala:71) at mill.eval.EvaluatorImpl.evaluateGroupCached(EvaluatorImpl.scala:15) at mill.eval.EvaluatorCore.$anonfun$evaluate0$2(EvaluatorCore.scala:116) at mill.eval.EvaluatorCore$$Lambda$788/0x0000000800ede800.apply(Unknown Source) at scala.concurrent.impl.Promise$Transformation.run(Promise.scala:467) at mill.eval.ExecutionContexts$RunNow$.execute(ExecutionContexts.scala:14) at scala.concurrent.impl.Promise$Transformation.submitWithValue(Promise.scala:429) at scala.concurrent.impl.Promise$DefaultPromise.submitWithValue(Promise.scala:338) at scala.concurrent.impl.Promise$DefaultPromise.dispatchOrAddCallbacks(Promise.scala:312) at scala.concurrent.impl.Promise$DefaultPromise.map(Promise.scala:182) at mill.eval.EvaluatorCore.$anonfun$evaluate0$1(EvaluatorCore.scala:92) at mill.eval.EvaluatorCore.$anonfun$evaluate0$1$adapted(EvaluatorCore.scala:90) at mill.eval.EvaluatorCore$$Lambda$779/0x0000000800ed6948.apply(Unknown Source) at scala.collection.immutable.Vector.foreach(Vector.scala:2124) at mill.eval.EvaluatorCore.evaluate0(EvaluatorCore.scala:90) at mill.eval.EvaluatorCore.$anonfun$evaluate$1(EvaluatorCore.scala:43) at mill.eval.EvaluatorCore$$Lambda$753/0x0000000800ec47c0.apply(Unknown Source) at scala.util.DynamicVariable.withValue(DynamicVariable.scala:59) at mill.eval.EvaluatorCore.evaluate(EvaluatorCore.scala:34) at mill.eval.EvaluatorCore.evaluate$(EvaluatorCore.scala:26) at mill.eval.EvaluatorImpl.evaluate(EvaluatorImpl.scala:15) at mill.main.RunScript$.evaluateNamed(RunScript.scala:38) at mill.main.RunScript$.$anonfun$evaluateTasksNamed$2(RunScript.scala:26) at mill.main.RunScript$$$Lambda$750/0x0000000800ec21a0.apply(Unknown Source) at scala.util.Either.map(Either.scala:382) at mill.main.RunScript$.evaluateTasksNamed(RunScript.scala:26) at mill.runner.MillBuildBootstrap$.evaluateWithWatches(MillBuildBootstrap.scala:399) at mill.runner.MillBuildBootstrap.$anonfun$processFinalTargets$3(MillBuildBootstrap.scala:308) at mill.runner.MillBuildBootstrap$$Lambda$2925/0x0000000801200690.apply(Unknown Source) at scala.util.DynamicVariable.withValue(DynamicVariable.scala:59) at mill.runner.MillBuildBootstrap.processFinalTargets(MillBuildBootstrap.scala:308) at mill.runner.MillBuildBootstrap.evaluateRec(MillBuildBootstrap.scala:196) at mill.runner.MillBuildBootstrap.$anonfun$evaluate$1(MillBuildBootstrap.scala:49) at mill.runner.MillBuildBootstrap$$Lambda$190/0x0000000800dcf1f0.apply(Unknown Source) at scala.util.DynamicVariable.withValue(DynamicVariable.scala:59) at mill.runner.MillBuildBootstrap.evaluate(MillBuildBootstrap.scala:48) at mill.runner.MillMain$.$anonfun$main0$6(MillMain.scala:234) at mill.runner.MillMain$$$Lambda$163/0x0000000800d87860.apply(Unknown Source) at mill.runner.Watching$.watchLoop(Watching.scala:27) at mill.runner.MillMain$.$anonfun$main0$1(MillMain.scala:219) at mill.runner.MillMain$$$Lambda$26/0x0000000800ce83d0.apply(Unknown Source) at scala.util.DynamicVariable.withValue(DynamicVariable.scala:59) at scala.Console$.withErr(Console.scala:193) at mill.api.SystemStreams$.$anonfun$withStreams$2(SystemStreams.scala:62) at mill.api.SystemStreams$$$Lambda$28/0x0000000800ce9350.apply(Unknown Source) at scala.util.DynamicVariable.withValue(DynamicVariable.scala:59) at scala.Console$.withOut(Console.scala:164) at mill.api.SystemStreams$.$anonfun$withStreams$1(SystemStreams.scala:61) at mill.api.SystemStreams$$$Lambda$27/0x0000000800ce9090.apply(Unknown Source) at scala.util.DynamicVariable.withValue(DynamicVariable.scala:59) at scala.Console$.withIn(Console.scala:227) at mill.api.SystemStreams$.withStreams(SystemStreams.scala:60) at mill.runner.MillMain$.main0(MillMain.scala:101) at mill.runner.MillMain$.liftedTree1$1(MillMain.scala:78) at mill.runner.MillMain$.main(MillMain.scala:69) at mill.runner.MillMain.main(MillMain.scala) at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(java.base@17.0.6/Native Method) at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(java.base@17.0.6/NativeMethodAccessorImpl.java:77) at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(java.base@17.0.6/DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(java.base@17.0.6/Method.java:568) at mill.main.client.IsolatedMillMainLoader.runMain(IsolatedMillMainLoader.java:58) at mill.main.client.MillClientMain.main(MillClientMain.java:78) "Reference Handler" #2 daemon prio=10 os_prio=31 cpu=3.02ms elapsed=603.98s tid=0x0000000133808200 nid=0x4c03 waiting on condition [0x000000016c292000] java.lang.Thread.State: RUNNABLE at java.lang.ref.Reference.waitForReferencePendingList(java.base@17.0.6/Native Method) at java.lang.ref.Reference.processPendingReferences(java.base@17.0.6/Reference.java:253) at java.lang.ref.Reference$ReferenceHandler.run(java.base@17.0.6/Reference.java:215) "Finalizer" #3 daemon prio=8 os_prio=31 cpu=0.08ms elapsed=603.98s tid=0x000000015003d600 nid=0x4b03 in Object.wait() [0x000000016c49e000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(java.base@17.0.6/Native Method) - waiting on <0x00000006004caa50> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(java.base@17.0.6/ReferenceQueue.java:155) - locked <0x00000006004caa50> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(java.base@17.0.6/ReferenceQueue.java:176) at java.lang.ref.Finalizer$FinalizerThread.run(java.base@17.0.6/Finalizer.java:172) "Signal Dispatcher" #4 daemon prio=9 os_prio=31 cpu=0.12ms elapsed=603.98s tid=0x000000015003ba00 nid=0x7903 waiting on condition [0x0000000000000000] java.lang.Thread.State: RUNNABLE "Service Thread" #5 daemon prio=9 os_prio=31 cpu=1.10ms elapsed=603.98s tid=0x000000015003c000 nid=0x5a03 runnable [0x0000000000000000] java.lang.Thread.State: RUNNABLE "Monitor Deflation Thread" #6 daemon prio=9 os_prio=31 cpu=13.78ms elapsed=603.98s tid=0x000000015003c600 nid=0x5b03 runnable [0x0000000000000000] java.lang.Thread.State: RUNNABLE "C2 CompilerThread0" #7 daemon prio=9 os_prio=31 cpu=2075.06ms elapsed=603.98s tid=0x000000015003cc00 nid=0x7503 waiting on condition [0x0000000000000000] java.lang.Thread.State: RUNNABLE No compile task "C1 CompilerThread0" #10 daemon prio=9 os_prio=31 cpu=1607.93ms elapsed=603.98s tid=0x0000000150041c00 nid=0x5d03 waiting on condition [0x0000000000000000] java.lang.Thread.State: RUNNABLE No compile task "Sweeper thread" #11 daemon prio=9 os_prio=31 cpu=44.75ms elapsed=603.98s tid=0x000000015004a200 nid=0x5f03 runnable [0x0000000000000000] java.lang.Thread.State: RUNNABLE "Notification Thread" #12 daemon prio=9 os_prio=31 cpu=0.03ms elapsed=603.98s tid=0x000000013600c400 nid=0x6103 runnable [0x0000000000000000] java.lang.Thread.State: RUNNABLE "Common-Cleaner" #13 daemon prio=8 os_prio=31 cpu=4.44ms elapsed=603.98s tid=0x000000013600d400 nid=0x6403 in Object.wait() [0x000000016d822000] java.lang.Thread.State: TIMED_WAITING (on object monitor) at java.lang.Object.wait(java.base@17.0.6/Native Method) - waiting on <0x00000006004131e0> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(java.base@17.0.6/ReferenceQueue.java:155) - locked <0x00000006004131e0> (a java.lang.ref.ReferenceQueue$Lock) at jdk.internal.ref.CleanerImpl.run(java.base@17.0.6/CleanerImpl.java:140) at java.lang.Thread.run(java.base@17.0.6/Thread.java:833) at jdk.internal.misc.InnocuousThread.run(java.base@17.0.6/InnocuousThread.java:162) "pool-1-thread-1" #15 prio=5 os_prio=31 cpu=62.81ms elapsed=603.61s tid=0x0000000136036400 nid=0xa903 runnable [0x000000016ec9a000] java.lang.Thread.State: RUNNABLE at java.io.FileInputStream.readBytes(java.base@17.0.6/Native Method) at java.io.FileInputStream.read(java.base@17.0.6/FileInputStream.java:276) at java.io.BufferedInputStream.fill(java.base@17.0.6/BufferedInputStream.java:244) at java.io.BufferedInputStream.read(java.base@17.0.6/BufferedInputStream.java:263) - locked <0x000000060045c5b8> (a java.io.BufferedInputStream) at org.eclipse.lsp4j.jsonrpc.json.StreamMessageProducer.listen(StreamMessageProducer.java:79) at org.eclipse.lsp4j.jsonrpc.json.ConcurrentMessageProcessor.run(ConcurrentMessageProcessor.java:113) at java.util.concurrent.Executors$RunnableAdapter.call(java.base@17.0.6/Executors.java:539) at java.util.concurrent.FutureTask.run(java.base@17.0.6/FutureTask.java:264) at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@17.0.6/ThreadPoolExecutor.java:1136) at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@17.0.6/ThreadPoolExecutor.java:635) at java.lang.Thread.run(java.base@17.0.6/Thread.java:833) "Thread-0" #16 prio=5 os_prio=31 cpu=0.22ms elapsed=603.61s tid=0x000000014000aa00 nid=0x8403 waiting on condition [0x000000016eea6000] java.lang.Thread.State: WAITING (parking) at jdk.internal.misc.Unsafe.park(java.base@17.0.6/Native Method) - parking to wait for <0x000000060041dde0> (a java.util.concurrent.FutureTask) at java.util.concurrent.locks.LockSupport.park(java.base@17.0.6/LockSupport.java:211) at java.util.concurrent.FutureTask.awaitDone(java.base@17.0.6/FutureTask.java:447) at java.util.concurrent.FutureTask.get(java.base@17.0.6/FutureTask.java:190) at org.eclipse.lsp4j.jsonrpc.json.ConcurrentMessageProcessor$1.get(ConcurrentMessageProcessor.java:54) at org.eclipse.lsp4j.jsonrpc.json.ConcurrentMessageProcessor$1.get(ConcurrentMessageProcessor.java:50) at mill.bsp.worker.BspWorkerImpl.$anonfun$startBspServer$2(BspWorkerImpl.scala:86) at mill.bsp.worker.BspWorkerImpl$$Lambda$160/0x0000000800da4a28.run(Unknown Source) at java.lang.Thread.run(java.base@17.0.6/Thread.java:833) "scala-execution-context-global-17" #17 daemon prio=5 os_prio=31 cpu=7.11ms elapsed=602.17s tid=0x0000000140812e00 nid=0x8603 waiting for monitor entry [0x000000016f4c9000] java.lang.Thread.State: BLOCKED (on object monitor) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:9) - parking to wait for <0x000000060041e078> (a scala.concurrent.impl.ExecutionContextImpl$$anon$3) - waiting to lock <0x0000000601a72b20> (a millbuild.build$IntegrationTestCrossModule$fork$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at mill.scalalib.JavaModule.unmanagedClasspath(JavaModule.scala:253) at mill.scalalib.JavaModule.unmanagedClasspath$(JavaModule.scala:253) at millbuild.build$IntegrationTestCrossModule$fork$.unmanagedClasspath(build.sc:1139) at mill.bsp.worker.MillBuildServer.$anonfun$buildTargetDependencySources$2(MillBuildServer.scala:352) at mill.bsp.worker.MillBuildServer$$Lambda$3078/0x0000000801262498.apply(Unknown Source) at mill.bsp.worker.MillBuildServer.$anonfun$completableTasks$2(MillBuildServer.scala:661) at mill.bsp.worker.MillBuildServer$$Lambda$3008/0x0000000800ddb678.apply(Unknown Source) at scala.collection.immutable.List.map(List.scala:250) at scala.collection.immutable.List.map(List.scala:79) at mill.bsp.worker.MillBuildServer.$anonfun$completableTasks$1(MillBuildServer.scala:659) at mill.bsp.worker.MillBuildServer$$Lambda$207/0x0000000800dd8da8.apply(Unknown Source) at mill.bsp.worker.MillBuildServer.$anonfun$completable$1(MillBuildServer.scala:730) at mill.bsp.worker.MillBuildServer.$anonfun$completable$1$adapted(MillBuildServer.scala:727) at mill.bsp.worker.MillBuildServer$$Lambda$208/0x0000000800dd9178.apply(Unknown Source) at scala.concurrent.impl.Promise$Transformation.run(Promise.scala:484) at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(java.base@17.0.6/ForkJoinTask.java:1395) at java.util.concurrent.ForkJoinTask.doExec(java.base@17.0.6/ForkJoinTask.java:373) at java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(java.base@17.0.6/ForkJoinPool.java:1182) at java.util.concurrent.ForkJoinPool.scan(java.base@17.0.6/ForkJoinPool.java:1655) at java.util.concurrent.ForkJoinPool.runWorker(java.base@17.0.6/ForkJoinPool.java:1622) at java.util.concurrent.ForkJoinWorkerThread.run(java.base@17.0.6/ForkJoinWorkerThread.java:165) "scala-execution-context-global-18" #18 daemon prio=5 os_prio=31 cpu=4595.02ms elapsed=602.17s tid=0x0000000132847000 nid=0xa303 waiting for monitor entry [0x000000016f6d5000] java.lang.Thread.State: BLOCKED (on object monitor) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:9) - parking to wait for <0x000000060041e078> (a scala.concurrent.impl.ExecutionContextImpl$$anon$3) - waiting to lock <0x0000000601750f38> (a millbuild.build$scalalib$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at mill.scalalib.JavaModule.sources(JavaModule.scala:348) at mill.scalalib.JavaModule.sources$(JavaModule.scala:348) at millbuild.build$scalalib$.sources(build.sc:728) at mill.bsp.worker.MillBuildServer.$anonfun$buildTargetSources$2(MillBuildServer.scala:300) at mill.bsp.worker.MillBuildServer$$Lambda$3066/0x0000000801261148.apply(Unknown Source) at mill.bsp.worker.MillBuildServer.$anonfun$completableTasks$2(MillBuildServer.scala:661) at mill.bsp.worker.MillBuildServer$$Lambda$3008/0x0000000800ddb678.apply(Unknown Source) at scala.collection.immutable.List.map(List.scala:250) at scala.collection.immutable.List.map(List.scala:79) at mill.bsp.worker.MillBuildServer.$anonfun$completableTasks$1(MillBuildServer.scala:659) at mill.bsp.worker.MillBuildServer$$Lambda$207/0x0000000800dd8da8.apply(Unknown Source) at mill.bsp.worker.MillBuildServer.$anonfun$completable$1(MillBuildServer.scala:730) at mill.bsp.worker.MillBuildServer.$anonfun$completable$1$adapted(MillBuildServer.scala:727) at mill.bsp.worker.MillBuildServer$$Lambda$208/0x0000000800dd9178.apply(Unknown Source) at scala.concurrent.impl.Promise$Transformation.run(Promise.scala:484) at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(java.base@17.0.6/ForkJoinTask.java:1395) at java.util.concurrent.ForkJoinTask.doExec(java.base@17.0.6/ForkJoinTask.java:373) at java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(java.base@17.0.6/ForkJoinPool.java:1182) at java.util.concurrent.ForkJoinPool.scan(java.base@17.0.6/ForkJoinPool.java:1655) at java.util.concurrent.ForkJoinPool.runWorker(java.base@17.0.6/ForkJoinPool.java:1622) at java.util.concurrent.ForkJoinWorkerThread.run(java.base@17.0.6/ForkJoinWorkerThread.java:165) "scala-execution-context-global-19" #19 daemon prio=5 os_prio=31 cpu=0.25ms elapsed=596.24s tid=0x00000001471ef600 nid=0x7c07 waiting for monitor entry [0x000000016f8e1000] java.lang.Thread.State: BLOCKED (on object monitor) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:9) - waiting to lock <0x0000000601a72b20> (a millbuild.build$IntegrationTestCrossModule$fork$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at mill.scalalib.JavaModule.resources(JavaModule.scala:354) at mill.scalalib.JavaModule.resources$(JavaModule.scala:354) at millbuild.build$IntegrationTestCrossModule$fork$.resources(build.sc:1139) at mill.bsp.worker.MillBuildServer.$anonfun$buildTargetResources$2(MillBuildServer.scala:407) at mill.bsp.worker.MillBuildServer$$Lambda$3098/0x0000000801265000.apply(Unknown Source) at mill.bsp.worker.MillBuildServer.$anonfun$completableTasks$2(MillBuildServer.scala:661) at mill.bsp.worker.MillBuildServer$$Lambda$3008/0x0000000800ddb678.apply(Unknown Source) at scala.collection.immutable.List.map(List.scala:250) at scala.collection.immutable.List.map(List.scala:79) at mill.bsp.worker.MillBuildServer.$anonfun$completableTasks$1(MillBuildServer.scala:659) at mill.bsp.worker.MillBuildServer$$Lambda$207/0x0000000800dd8da8.apply(Unknown Source) at mill.bsp.worker.MillBuildServer.$anonfun$completable$1(MillBuildServer.scala:730) at mill.bsp.worker.MillBuildServer.$anonfun$completable$1$adapted(MillBuildServer.scala:727) at mill.bsp.worker.MillBuildServer$$Lambda$208/0x0000000800dd9178.apply(Unknown Source) at scala.concurrent.impl.Promise$Transformation.run(Promise.scala:484) at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(java.base@17.0.6/ForkJoinTask.java:1395) at java.util.concurrent.ForkJoinTask.doExec(java.base@17.0.6/ForkJoinTask.java:373) at java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(java.base@17.0.6/ForkJoinPool.java:1182) at java.util.concurrent.ForkJoinPool.scan(java.base@17.0.6/ForkJoinPool.java:1655) at java.util.concurrent.ForkJoinPool.runWorker(java.base@17.0.6/ForkJoinPool.java:1622) at java.util.concurrent.ForkJoinWorkerThread.run(java.base@17.0.6/ForkJoinWorkerThread.java:165) "scala-execution-context-global-20" #20 daemon prio=5 os_prio=31 cpu=10.83ms elapsed=596.24s tid=0x0000000141866a00 nid=0x8903 waiting on condition [0x000000016faee000] java.lang.Thread.State: WAITING (parking) at jdk.internal.misc.Unsafe.park(java.base@17.0.6/Native Method) - parking to wait for <0x000000060041e078> (a scala.concurrent.impl.ExecutionContextImpl$$anon$3) at java.util.concurrent.locks.LockSupport.park(java.base@17.0.6/LockSupport.java:341) at java.util.concurrent.ForkJoinPool.awaitWork(java.base@17.0.6/ForkJoinPool.java:1724) at java.util.concurrent.ForkJoinPool.runWorker(java.base@17.0.6/ForkJoinPool.java:1623) at java.util.concurrent.ForkJoinWorkerThread.run(java.base@17.0.6/ForkJoinWorkerThread.java:165) "scala-execution-context-global-21" #21 daemon prio=5 os_prio=31 cpu=19.88ms elapsed=596.24s tid=0x0000000141867a00 nid=0x8a03 waiting for monitor entry [0x000000016fcf6000] java.lang.Thread.State: BLOCKED (on object monitor) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:9) - waiting to lock <0x00000006018ea698> (a millbuild.build$runner$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at mill.scalalib.PublishModule.publishSelfDependency(PublishModule.scala:50) at mill.scalalib.PublishModule.publishSelfDependency$(PublishModule.scala:50) at millbuild.build$runner$.publishSelfDependency(build.sc:1403) at millbuild.build$main$.$anonfun$buildInfoMembers$2(build.sc:558) at millbuild.build$main$$$Lambda$3212/0x000000080128ce10.apply(Unknown Source) at scala.collection.immutable.List.map(List.scala:246) at scala.collection.immutable.List.map(List.scala:79) at mill.define.Target$.traverse(Task.scala:330) at millbuild.build$main$.$anonfun$buildInfoMembers$1(build.sc:558) at millbuild.build$main$$$Lambda$3207/0x0000000801287840.apply(Unknown Source) at scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:469) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:10) - locked <0x000000060174b268> (a millbuild.build$main$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at millbuild.build$main$.buildInfoMembers(build.sc:547) at mill.contrib.buildinfo.BuildInfo.$anonfun$buildInfoSources$1(BuildInfo.scala:67) at mill.contrib.buildinfo.BuildInfo$$Lambda$3088/0x0000000801251ef8.apply(Unknown Source) at scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:469) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:10) - locked <0x000000060174b268> (a millbuild.build$main$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at mill.contrib.buildinfo.BuildInfo.buildInfoSources(BuildInfo.scala:66) at mill.contrib.buildinfo.BuildInfo.buildInfoSources$(BuildInfo.scala:66) at millbuild.build$main$.buildInfoSources(build.sc:554) at mill.contrib.buildinfo.BuildInfo.$anonfun$generatedSources$1(BuildInfo.scala:63) at mill.contrib.buildinfo.BuildInfo$$Lambda$3087/0x0000000801251c38.apply(Unknown Source) at scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:469) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:10) - locked <0x000000060174b268> (a millbuild.build$main$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at mill.contrib.buildinfo.BuildInfo.generatedSources(BuildInfo.scala:62) at mill.contrib.buildinfo.BuildInfo.generatedSources$(BuildInfo.scala:62) at millbuild.build$main$.generatedSources(build.sc:554) at mill.scalalib.JavaModule.$anonfun$allSources$1(JavaModule.scala:373) at mill.scalalib.JavaModule$$Lambda$680/0x0000000800eade10.apply(Unknown Source) at scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:469) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:10) - locked <0x000000060174b268> (a millbuild.build$main$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at mill.scalalib.JavaModule.allSources(JavaModule.scala:373) at mill.scalalib.JavaModule.allSources$(JavaModule.scala:373) at millbuild.build$main$.allSources(build.sc:554) at mill.scalalib.ScalaModule.$anonfun$allSourceFiles$1(ScalaModule.scala:56) at mill.scalalib.ScalaModule$$Lambda$3146/0x0000000801278000.apply(Unknown Source) at scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:469) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:10) - locked <0x000000060174b268> (a millbuild.build$main$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at mill.scalalib.ScalaModule.allSourceFiles(ScalaModule.scala:55) at mill.scalalib.ScalaModule.allSourceFiles$(ScalaModule.scala:55) at millbuild.build$main$.allSourceFiles(build.sc:554) at mill.scalalib.ScalaModule.$anonfun$compile$1(ScalaModule.scala:291) at mill.scalalib.ScalaModule$$Lambda$670/0x0000000800ea9c28.apply(Unknown Source) at scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:469) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:10) - locked <0x000000060174b268> (a millbuild.build$main$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at mill.scalalib.ScalaModule.compile(ScalaModule.scala:280) at mill.scalalib.ScalaModule.compile$(ScalaModule.scala:280) at millbuild.build$main$.compile(build.sc:554) at mill.scalalib.JavaModule.$anonfun$upstreamCompileOutput$2(JavaModule.scala:268) at mill.scalalib.JavaModule$$Lambda$678/0x0000000800eaca38.apply(Unknown Source) at scala.collection.immutable.List.map(List.scala:246) at scala.collection.immutable.List.map(List.scala:79) at mill.define.Target$.traverse(Task.scala:330) at mill.scalalib.JavaModule.$anonfun$upstreamCompileOutput$1(JavaModule.scala:268) at mill.scalalib.JavaModule$$Lambda$677/0x0000000800eac778.apply(Unknown Source) at scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:469) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:10) - locked <0x0000000601750f38> (a millbuild.build$scalalib$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at mill.scalalib.JavaModule.upstreamCompileOutput(JavaModule.scala:267) at mill.scalalib.JavaModule.upstreamCompileOutput$(JavaModule.scala:267) at millbuild.build$scalalib$.upstreamCompileOutput(build.sc:728) at mill.scalalib.ScalaModule.$anonfun$compile$1(ScalaModule.scala:290) at mill.scalalib.ScalaModule$$Lambda$670/0x0000000800ea9c28.apply(Unknown Source) at scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:469) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:10) - locked <0x0000000601750f38> (a millbuild.build$scalalib$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at mill.scalalib.ScalaModule.compile(ScalaModule.scala:280) at mill.scalalib.ScalaModule.compile$(ScalaModule.scala:280) at millbuild.build$scalalib$.compile(build.sc:728) at mill.scalalib.JavaModule.$anonfun$upstreamCompileOutput$2(JavaModule.scala:268) at mill.scalalib.JavaModule$$Lambda$678/0x0000000800eaca38.apply(Unknown Source) at scala.collection.immutable.List.map(List.scala:246) at scala.collection.immutable.List.map(List.scala:79) at mill.define.Target$.traverse(Task.scala:330) at mill.scalalib.JavaModule.$anonfun$upstreamCompileOutput$1(JavaModule.scala:268) at mill.scalalib.JavaModule$$Lambda$677/0x0000000800eac778.apply(Unknown Source) at scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:469) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:10) - locked <0x00000006019273e0> (a millbuild.build$integration$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at mill.scalalib.JavaModule.upstreamCompileOutput(JavaModule.scala:267) at mill.scalalib.JavaModule.upstreamCompileOutput$(JavaModule.scala:267) at millbuild.build$integration$.upstreamCompileOutput(build.sc:1272) at mill.scalalib.ScalaModule.$anonfun$compile$1(ScalaModule.scala:290) at mill.scalalib.ScalaModule$$Lambda$670/0x0000000800ea9c28.apply(Unknown Source) at scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:469) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:10) - locked <0x00000006019273e0> (a millbuild.build$integration$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at mill.scalalib.ScalaModule.compile(ScalaModule.scala:280) at mill.scalalib.ScalaModule.compile$(ScalaModule.scala:280) at millbuild.build$integration$.compile(build.sc:1272) at mill.scalalib.JavaModule.$anonfun$upstreamCompileOutput$2(JavaModule.scala:268) at mill.scalalib.JavaModule$$Lambda$678/0x0000000800eaca38.apply(Unknown Source) at scala.collection.immutable.List.map(List.scala:246) at scala.collection.immutable.List.map(List.scala:79) at mill.define.Target$.traverse(Task.scala:330) at mill.scalalib.JavaModule.$anonfun$upstreamCompileOutput$1(JavaModule.scala:268) at mill.scalalib.JavaModule$$Lambda$677/0x0000000800eac778.apply(Unknown Source) at scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:469) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:10) - locked <0x0000000601a13830> (a millbuild.build$example$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at mill.scalalib.JavaModule.upstreamCompileOutput(JavaModule.scala:267) at mill.scalalib.JavaModule.upstreamCompileOutput$(JavaModule.scala:267) at millbuild.build$example$.upstreamCompileOutput(build.sc:1145) at mill.scalalib.ScalaModule.$anonfun$compile$1(ScalaModule.scala:290) at mill.scalalib.ScalaModule$$Lambda$670/0x0000000800ea9c28.apply(Unknown Source) at scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:469) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:10) - locked <0x0000000601a13830> (a millbuild.build$example$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at mill.scalalib.ScalaModule.compile(ScalaModule.scala:280) at mill.scalalib.ScalaModule.compile$(ScalaModule.scala:280) at millbuild.build$example$.compile(build.sc:1145) at millbuild.build$example$ExampleCrossModule.$anonfun$compile$4(build.sc:1142) at millbuild.build$example$ExampleCrossModule$$Lambda$3196/0x0000000801285c38.apply(Unknown Source) at scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:469) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:10) - locked <0x0000000601a72660> (a millbuild.build$example$tasks$$anonfun$28$ExampleCrossModule$macro$3$4) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at millbuild.build$example$ExampleCrossModule.compile(build.sc:1142) at millbuild.build$example$ExampleCrossModule.compile$(build.sc:1142) at millbuild.build$example$tasks$$anonfun$28$ExampleCrossModule$macro$3$4.compile(build.sc:1133) at millbuild.build$IntegrationTestModule$ModeModule.$anonfun$compile$1(build.sc:1108) at millbuild.build$IntegrationTestModule$ModeModule$$Lambda$3185/0x0000000801276d38.apply(Unknown Source) at scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:469) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:10) - locked <0x0000000601a72b20> (a millbuild.build$IntegrationTestCrossModule$fork$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at millbuild.build$IntegrationTestModule$ModeModule.compile(build.sc:1108) at millbuild.build$IntegrationTestModule$ModeModule.compile$(build.sc:1108) at millbuild.build$IntegrationTestCrossModule$fork$.compile(build.sc:1139) at mill.scalalib.ScalaModule.bspCompileClassesPath(ScalaModule.scala:308) at mill.scalalib.ScalaModule.bspCompileClassesPath$(ScalaModule.scala:307) at millbuild.build$IntegrationTestCrossModule$fork$.bspCompileClassesPath(build.sc:1139) at mill.bsp.worker.MillScalaBuildServer.$anonfun$buildTargetScalacOptions$2(MillScalaBuildServer.scala:39) at mill.bsp.worker.MillScalaBuildServer$$Lambda$3141/0x0000000801271cf0.apply(Unknown Source) at mill.bsp.worker.MillBuildServer.$anonfun$completableTasks$2(MillBuildServer.scala:661) at mill.bsp.worker.MillBuildServer$$Lambda$3008/0x0000000800ddb678.apply(Unknown Source) at scala.collection.immutable.List.map(List.scala:250) at scala.collection.immutable.List.map(List.scala:79) at mill.bsp.worker.MillBuildServer.$anonfun$completableTasks$1(MillBuildServer.scala:659) at mill.bsp.worker.MillBuildServer$$Lambda$207/0x0000000800dd8da8.apply(Unknown Source) at mill.bsp.worker.MillBuildServer.$anonfun$completable$1(MillBuildServer.scala:730) at mill.bsp.worker.MillBuildServer.$anonfun$completable$1$adapted(MillBuildServer.scala:727) at mill.bsp.worker.MillBuildServer$$Lambda$208/0x0000000800dd9178.apply(Unknown Source) at scala.concurrent.impl.Promise$Transformation.run(Promise.scala:484) at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(java.base@17.0.6/ForkJoinTask.java:1395) at java.util.concurrent.ForkJoinTask.doExec(java.base@17.0.6/ForkJoinTask.java:373) at java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(java.base@17.0.6/ForkJoinPool.java:1182) at java.util.concurrent.ForkJoinPool.scan(java.base@17.0.6/ForkJoinPool.java:1655) at java.util.concurrent.ForkJoinPool.runWorker(java.base@17.0.6/ForkJoinPool.java:1622) at java.util.concurrent.ForkJoinWorkerThread.run(java.base@17.0.6/ForkJoinWorkerThread.java:165) "scala-execution-context-global-22" #22 daemon prio=5 os_prio=31 cpu=3.12ms elapsed=596.23s tid=0x0000000141865c00 nid=0x9f03 waiting for monitor entry [0x000000016ff04000] java.lang.Thread.State: BLOCKED (on object monitor) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:9) - waiting to lock <0x0000000601750f38> (a millbuild.build$scalalib$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at mill.scalalib.ScalaModule.compile(ScalaModule.scala:280) at mill.scalalib.ScalaModule.compile$(ScalaModule.scala:280) at millbuild.build$scalalib$.compile(build.sc:728) at mill.scalalib.JavaModule.$anonfun$upstreamCompileOutput$2(JavaModule.scala:268) at mill.scalalib.JavaModule$$Lambda$678/0x0000000800eaca38.apply(Unknown Source) at scala.collection.immutable.List.map(List.scala:246) at scala.collection.immutable.List.map(List.scala:79) at mill.define.Target$.traverse(Task.scala:330) at mill.scalalib.JavaModule.$anonfun$upstreamCompileOutput$1(JavaModule.scala:268) at mill.scalalib.JavaModule$$Lambda$677/0x0000000800eac778.apply(Unknown Source) at scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:469) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:10) - locked <0x00000006018ea698> (a millbuild.build$runner$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at mill.scalalib.JavaModule.upstreamCompileOutput(JavaModule.scala:267) at mill.scalalib.JavaModule.upstreamCompileOutput$(JavaModule.scala:267) at millbuild.build$runner$.upstreamCompileOutput(build.sc:1403) at mill.scalalib.ScalaModule.$anonfun$compile$1(ScalaModule.scala:290) at mill.scalalib.ScalaModule$$Lambda$670/0x0000000800ea9c28.apply(Unknown Source) at scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:469) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:10) - locked <0x00000006018ea698> (a millbuild.build$runner$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at mill.scalalib.ScalaModule.compile(ScalaModule.scala:280) at mill.scalalib.ScalaModule.compile$(ScalaModule.scala:280) at millbuild.build$runner$.compile(build.sc:1403) at mill.scalalib.JavaModule.$anonfun$upstreamCompileOutput$2(JavaModule.scala:268) at mill.scalalib.JavaModule$$Lambda$678/0x0000000800eaca38.apply(Unknown Source) at scala.collection.immutable.List.map(List.scala:246) at scala.collection.immutable.List.map(List.scala:79) at mill.define.Target$.traverse(Task.scala:330) at mill.scalalib.JavaModule.$anonfun$upstreamCompileOutput$1(JavaModule.scala:268) at mill.scalalib.JavaModule$$Lambda$677/0x0000000800eac778.apply(Unknown Source) at scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:469) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:10) - locked <0x00000006019e70f0> (a millbuild.build$dist$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at mill.scalalib.JavaModule.upstreamCompileOutput(JavaModule.scala:267) at mill.scalalib.JavaModule.upstreamCompileOutput$(JavaModule.scala:267) at millbuild.build$dist$.upstreamCompileOutput(build.sc:1417) at mill.scalalib.JavaModule.$anonfun$compile$1(JavaModule.scala:409) at mill.scalalib.JavaModule$$Lambda$3166/0x000000080127dcf8.apply(Unknown Source) at scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:469) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:10) - locked <0x00000006019e70f0> (a millbuild.build$dist$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at mill.scalalib.JavaModule.compile(JavaModule.scala:405) at mill.scalalib.JavaModule.compile$(JavaModule.scala:405) at millbuild.build$dist$.compile(build.sc:1417) at mill.scalalib.JavaModule.bspCompileClassesPath(JavaModule.scala:428) at mill.scalalib.JavaModule.bspCompileClassesPath$(JavaModule.scala:427) at millbuild.build$dist$.bspCompileClassesPath(build.sc:1417) at mill.bsp.worker.MillJavaBuildServer.$anonfun$buildTargetJavacOptions$2(MillJavaBuildServer.scala:27) at mill.bsp.worker.MillJavaBuildServer$$Lambda$3154/0x0000000801272aa0.apply(Unknown Source) at mill.bsp.worker.MillBuildServer.$anonfun$completableTasks$2(MillBuildServer.scala:661) at mill.bsp.worker.MillBuildServer$$Lambda$3008/0x0000000800ddb678.apply(Unknown Source) at scala.collection.immutable.List.map(List.scala:250) at scala.collection.immutable.List.map(List.scala:79) at mill.bsp.worker.MillBuildServer.$anonfun$completableTasks$1(MillBuildServer.scala:659) at mill.bsp.worker.MillBuildServer$$Lambda$207/0x0000000800dd8da8.apply(Unknown Source) at mill.bsp.worker.MillBuildServer.$anonfun$completable$1(MillBuildServer.scala:730) at mill.bsp.worker.MillBuildServer.$anonfun$completable$1$adapted(MillBuildServer.scala:727) at mill.bsp.worker.MillBuildServer$$Lambda$208/0x0000000800dd9178.apply(Unknown Source) at scala.concurrent.impl.Promise$Transformation.run(Promise.scala:484) at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(java.base@17.0.6/ForkJoinTask.java:1395) at java.util.concurrent.ForkJoinTask.doExec(java.base@17.0.6/ForkJoinTask.java:373) at java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(java.base@17.0.6/ForkJoinPool.java:1182) at java.util.concurrent.ForkJoinPool.scan(java.base@17.0.6/ForkJoinPool.java:1655) at java.util.concurrent.ForkJoinPool.runWorker(java.base@17.0.6/ForkJoinPool.java:1622) at java.util.concurrent.ForkJoinWorkerThread.run(java.base@17.0.6/ForkJoinWorkerThread.java:165) "Attach Listener" #23 daemon prio=9 os_prio=31 cpu=0.26ms elapsed=0.10s tid=0x00000001506e2800 nid=0x660f waiting on condition [0x0000000000000000] java.lang.Thread.State: RUNNABLE "VM Thread" os_prio=31 cpu=38.16ms elapsed=603.98s tid=0x0000000136e07e00 nid=0x4703 runnable "GC Thread#0" os_prio=31 cpu=43.52ms elapsed=603.99s tid=0x0000000136e06810 nid=0x3803 runnable "GC Thread#1" os_prio=31 cpu=54.90ms elapsed=603.69s tid=0x0000000131f0b3d0 nid=0x7303 runnable "GC Thread#2" os_prio=31 cpu=51.94ms elapsed=603.69s tid=0x0000000131f0b850 nid=0x7203 runnable "GC Thread#3" os_prio=31 cpu=44.43ms elapsed=603.69s tid=0x0000000136e14230 nid=0x7103 runnable "GC Thread#4" os_prio=31 cpu=54.45ms elapsed=603.68s tid=0x0000000136e144e0 nid=0x7003 runnable "GC Thread#5" os_prio=31 cpu=56.16ms elapsed=603.68s tid=0x0000000136904c70 nid=0x6c03 runnable "GC Thread#6" os_prio=31 cpu=48.38ms elapsed=603.68s tid=0x00000001369050f0 nid=0x6d03 runnable "GC Thread#7" os_prio=31 cpu=60.82ms elapsed=603.68s tid=0x0000000136e14960 nid=0x8003 runnable "GC Thread#8" os_prio=31 cpu=58.30ms elapsed=603.68s tid=0x0000000136a043e0 nid=0x8203 runnable "G1 Main Marker" os_prio=31 cpu=0.28ms elapsed=603.99s tid=0x0000000136e06ec0 nid=0x3703 runnable "G1 Conc#0" os_prio=31 cpu=9.32ms elapsed=603.99s tid=0x0000000136f04080 nid=0x3503 runnable "G1 Conc#1" os_prio=31 cpu=8.25ms elapsed=602.81s tid=0x0000000136a06bb0 nid=0xa503 runnable "G1 Refine#0" os_prio=31 cpu=0.02ms elapsed=603.99s tid=0x0000000136f061b0 nid=0x4203 runnable "G1 Service" os_prio=31 cpu=164.57ms elapsed=603.99s tid=0x0000000136f06a50 nid=0x4303 runnable "VM Periodic Task Thread" os_prio=31 cpu=332.33ms elapsed=603.98s tid=0x0000000131f062b0 nid=0x6303 waiting on condition JNI global refs: 10, weak refs: 0 Found one Java-level deadlock: ============================= "scala-execution-context-global-17": waiting to lock monitor 0x0000600001811c70 (object 0x0000000601a72b20, a millbuild.build$IntegrationTestCrossModule$fork$), which is held by "scala-execution-context-global-21" "scala-execution-context-global-21": waiting to lock monitor 0x0000600001829d40 (object 0x00000006018ea698, a millbuild.build$runner$), which is held by "scala-execution-context-global-22" "scala-execution-context-global-22": waiting to lock monitor 0x0000600001811d40 (object 0x0000000601750f38, a millbuild.build$scalalib$), which is held by "scala-execution-context-global-21" Java stack information for the threads listed above: =================================================== "scala-execution-context-global-17": at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:9) - parking to wait for <0x000000060041e078> (a scala.concurrent.impl.ExecutionContextImpl$$anon$3) - waiting to lock <0x0000000601a72b20> (a millbuild.build$IntegrationTestCrossModule$fork$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at mill.scalalib.JavaModule.unmanagedClasspath(JavaModule.scala:253) at mill.scalalib.JavaModule.unmanagedClasspath$(JavaModule.scala:253) at millbuild.build$IntegrationTestCrossModule$fork$.unmanagedClasspath(build.sc:1139) at mill.bsp.worker.MillBuildServer.$anonfun$buildTargetDependencySources$2(MillBuildServer.scala:352) at mill.bsp.worker.MillBuildServer$$Lambda$3078/0x0000000801262498.apply(Unknown Source) at mill.bsp.worker.MillBuildServer.$anonfun$completableTasks$2(MillBuildServer.scala:661) at mill.bsp.worker.MillBuildServer$$Lambda$3008/0x0000000800ddb678.apply(Unknown Source) at scala.collection.immutable.List.map(List.scala:250) at scala.collection.immutable.List.map(List.scala:79) at mill.bsp.worker.MillBuildServer.$anonfun$completableTasks$1(MillBuildServer.scala:659) at mill.bsp.worker.MillBuildServer$$Lambda$207/0x0000000800dd8da8.apply(Unknown Source) at mill.bsp.worker.MillBuildServer.$anonfun$completable$1(MillBuildServer.scala:730) at mill.bsp.worker.MillBuildServer.$anonfun$completable$1$adapted(MillBuildServer.scala:727) at mill.bsp.worker.MillBuildServer$$Lambda$208/0x0000000800dd9178.apply(Unknown Source) at scala.concurrent.impl.Promise$Transformation.run(Promise.scala:484) at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(java.base@17.0.6/ForkJoinTask.java:1395) at java.util.concurrent.ForkJoinTask.doExec(java.base@17.0.6/ForkJoinTask.java:373) at java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(java.base@17.0.6/ForkJoinPool.java:1182) at java.util.concurrent.ForkJoinPool.scan(java.base@17.0.6/ForkJoinPool.java:1655) at java.util.concurrent.ForkJoinPool.runWorker(java.base@17.0.6/ForkJoinPool.java:1622) at java.util.concurrent.ForkJoinWorkerThread.run(java.base@17.0.6/ForkJoinWorkerThread.java:165) "scala-execution-context-global-21": at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:9) - waiting to lock <0x00000006018ea698> (a millbuild.build$runner$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at mill.scalalib.PublishModule.publishSelfDependency(PublishModule.scala:50) at mill.scalalib.PublishModule.publishSelfDependency$(PublishModule.scala:50) at millbuild.build$runner$.publishSelfDependency(build.sc:1403) at millbuild.build$main$.$anonfun$buildInfoMembers$2(build.sc:558) at millbuild.build$main$$$Lambda$3212/0x000000080128ce10.apply(Unknown Source) at scala.collection.immutable.List.map(List.scala:246) at scala.collection.immutable.List.map(List.scala:79) at mill.define.Target$.traverse(Task.scala:330) at millbuild.build$main$.$anonfun$buildInfoMembers$1(build.sc:558) at millbuild.build$main$$$Lambda$3207/0x0000000801287840.apply(Unknown Source) at scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:469) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:10) - locked <0x000000060174b268> (a millbuild.build$main$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at millbuild.build$main$.buildInfoMembers(build.sc:547) at mill.contrib.buildinfo.BuildInfo.$anonfun$buildInfoSources$1(BuildInfo.scala:67) at mill.contrib.buildinfo.BuildInfo$$Lambda$3088/0x0000000801251ef8.apply(Unknown Source) at scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:469) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:10) - locked <0x000000060174b268> (a millbuild.build$main$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at mill.contrib.buildinfo.BuildInfo.buildInfoSources(BuildInfo.scala:66) at mill.contrib.buildinfo.BuildInfo.buildInfoSources$(BuildInfo.scala:66) at millbuild.build$main$.buildInfoSources(build.sc:554) at mill.contrib.buildinfo.BuildInfo.$anonfun$generatedSources$1(BuildInfo.scala:63) at mill.contrib.buildinfo.BuildInfo$$Lambda$3087/0x0000000801251c38.apply(Unknown Source) at scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:469) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:10) - locked <0x000000060174b268> (a millbuild.build$main$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at mill.contrib.buildinfo.BuildInfo.generatedSources(BuildInfo.scala:62) at mill.contrib.buildinfo.BuildInfo.generatedSources$(BuildInfo.scala:62) at millbuild.build$main$.generatedSources(build.sc:554) at mill.scalalib.JavaModule.$anonfun$allSources$1(JavaModule.scala:373) at mill.scalalib.JavaModule$$Lambda$680/0x0000000800eade10.apply(Unknown Source) at scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:469) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:10) - locked <0x000000060174b268> (a millbuild.build$main$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at mill.scalalib.JavaModule.allSources(JavaModule.scala:373) at mill.scalalib.JavaModule.allSources$(JavaModule.scala:373) at millbuild.build$main$.allSources(build.sc:554) at mill.scalalib.ScalaModule.$anonfun$allSourceFiles$1(ScalaModule.scala:56) at mill.scalalib.ScalaModule$$Lambda$3146/0x0000000801278000.apply(Unknown Source) at scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:469) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:10) - locked <0x000000060174b268> (a millbuild.build$main$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at mill.scalalib.ScalaModule.allSourceFiles(ScalaModule.scala:55) at mill.scalalib.ScalaModule.allSourceFiles$(ScalaModule.scala:55) at millbuild.build$main$.allSourceFiles(build.sc:554) at mill.scalalib.ScalaModule.$anonfun$compile$1(ScalaModule.scala:291) at mill.scalalib.ScalaModule$$Lambda$670/0x0000000800ea9c28.apply(Unknown Source) at scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:469) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:10) - locked <0x000000060174b268> (a millbuild.build$main$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at mill.scalalib.ScalaModule.compile(ScalaModule.scala:280) at mill.scalalib.ScalaModule.compile$(ScalaModule.scala:280) at millbuild.build$main$.compile(build.sc:554) at mill.scalalib.JavaModule.$anonfun$upstreamCompileOutput$2(JavaModule.scala:268) at mill.scalalib.JavaModule$$Lambda$678/0x0000000800eaca38.apply(Unknown Source) at scala.collection.immutable.List.map(List.scala:246) at scala.collection.immutable.List.map(List.scala:79) at mill.define.Target$.traverse(Task.scala:330) at mill.scalalib.JavaModule.$anonfun$upstreamCompileOutput$1(JavaModule.scala:268) at mill.scalalib.JavaModule$$Lambda$677/0x0000000800eac778.apply(Unknown Source) at scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:469) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:10) - locked <0x0000000601750f38> (a millbuild.build$scalalib$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at mill.scalalib.JavaModule.upstreamCompileOutput(JavaModule.scala:267) at mill.scalalib.JavaModule.upstreamCompileOutput$(JavaModule.scala:267) at millbuild.build$scalalib$.upstreamCompileOutput(build.sc:728) at mill.scalalib.ScalaModule.$anonfun$compile$1(ScalaModule.scala:290) at mill.scalalib.ScalaModule$$Lambda$670/0x0000000800ea9c28.apply(Unknown Source) at scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:469) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:10) - locked <0x0000000601750f38> (a millbuild.build$scalalib$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at mill.scalalib.ScalaModule.compile(ScalaModule.scala:280) at mill.scalalib.ScalaModule.compile$(ScalaModule.scala:280) at millbuild.build$scalalib$.compile(build.sc:728) at mill.scalalib.JavaModule.$anonfun$upstreamCompileOutput$2(JavaModule.scala:268) at mill.scalalib.JavaModule$$Lambda$678/0x0000000800eaca38.apply(Unknown Source) at scala.collection.immutable.List.map(List.scala:246) at scala.collection.immutable.List.map(List.scala:79) at mill.define.Target$.traverse(Task.scala:330) at mill.scalalib.JavaModule.$anonfun$upstreamCompileOutput$1(JavaModule.scala:268) at mill.scalalib.JavaModule$$Lambda$677/0x0000000800eac778.apply(Unknown Source) at scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:469) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:10) - locked <0x00000006019273e0> (a millbuild.build$integration$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at mill.scalalib.JavaModule.upstreamCompileOutput(JavaModule.scala:267) at mill.scalalib.JavaModule.upstreamCompileOutput$(JavaModule.scala:267) at millbuild.build$integration$.upstreamCompileOutput(build.sc:1272) at mill.scalalib.ScalaModule.$anonfun$compile$1(ScalaModule.scala:290) at mill.scalalib.ScalaModule$$Lambda$670/0x0000000800ea9c28.apply(Unknown Source) at scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:469) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:10) - locked <0x00000006019273e0> (a millbuild.build$integration$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at mill.scalalib.ScalaModule.compile(ScalaModule.scala:280) at mill.scalalib.ScalaModule.compile$(ScalaModule.scala:280) at millbuild.build$integration$.compile(build.sc:1272) at mill.scalalib.JavaModule.$anonfun$upstreamCompileOutput$2(JavaModule.scala:268) at mill.scalalib.JavaModule$$Lambda$678/0x0000000800eaca38.apply(Unknown Source) at scala.collection.immutable.List.map(List.scala:246) at scala.collection.immutable.List.map(List.scala:79) at mill.define.Target$.traverse(Task.scala:330) at mill.scalalib.JavaModule.$anonfun$upstreamCompileOutput$1(JavaModule.scala:268) at mill.scalalib.JavaModule$$Lambda$677/0x0000000800eac778.apply(Unknown Source) at scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:469) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:10) - locked <0x0000000601a13830> (a millbuild.build$example$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at mill.scalalib.JavaModule.upstreamCompileOutput(JavaModule.scala:267) at mill.scalalib.JavaModule.upstreamCompileOutput$(JavaModule.scala:267) at millbuild.build$example$.upstreamCompileOutput(build.sc:1145) at mill.scalalib.ScalaModule.$anonfun$compile$1(ScalaModule.scala:290) at mill.scalalib.ScalaModule$$Lambda$670/0x0000000800ea9c28.apply(Unknown Source) at scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:469) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:10) - locked <0x0000000601a13830> (a millbuild.build$example$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at mill.scalalib.ScalaModule.compile(ScalaModule.scala:280) at mill.scalalib.ScalaModule.compile$(ScalaModule.scala:280) at millbuild.build$example$.compile(build.sc:1145) at millbuild.build$example$ExampleCrossModule.$anonfun$compile$4(build.sc:1142) at millbuild.build$example$ExampleCrossModule$$Lambda$3196/0x0000000801285c38.apply(Unknown Source) at scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:469) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:10) - locked <0x0000000601a72660> (a millbuild.build$example$tasks$$anonfun$28$ExampleCrossModule$macro$3$4) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at millbuild.build$example$ExampleCrossModule.compile(build.sc:1142) at millbuild.build$example$ExampleCrossModule.compile$(build.sc:1142) at millbuild.build$example$tasks$$anonfun$28$ExampleCrossModule$macro$3$4.compile(build.sc:1133) at millbuild.build$IntegrationTestModule$ModeModule.$anonfun$compile$1(build.sc:1108) at millbuild.build$IntegrationTestModule$ModeModule$$Lambda$3185/0x0000000801276d38.apply(Unknown Source) at scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:469) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:10) - locked <0x0000000601a72b20> (a millbuild.build$IntegrationTestCrossModule$fork$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at millbuild.build$IntegrationTestModule$ModeModule.compile(build.sc:1108) at millbuild.build$IntegrationTestModule$ModeModule.compile$(build.sc:1108) at millbuild.build$IntegrationTestCrossModule$fork$.compile(build.sc:1139) at mill.scalalib.ScalaModule.bspCompileClassesPath(ScalaModule.scala:308) at mill.scalalib.ScalaModule.bspCompileClassesPath$(ScalaModule.scala:307) at millbuild.build$IntegrationTestCrossModule$fork$.bspCompileClassesPath(build.sc:1139) at mill.bsp.worker.MillScalaBuildServer.$anonfun$buildTargetScalacOptions$2(MillScalaBuildServer.scala:39) at mill.bsp.worker.MillScalaBuildServer$$Lambda$3141/0x0000000801271cf0.apply(Unknown Source) at mill.bsp.worker.MillBuildServer.$anonfun$completableTasks$2(MillBuildServer.scala:661) at mill.bsp.worker.MillBuildServer$$Lambda$3008/0x0000000800ddb678.apply(Unknown Source) at scala.collection.immutable.List.map(List.scala:250) at scala.collection.immutable.List.map(List.scala:79) at mill.bsp.worker.MillBuildServer.$anonfun$completableTasks$1(MillBuildServer.scala:659) at mill.bsp.worker.MillBuildServer$$Lambda$207/0x0000000800dd8da8.apply(Unknown Source) at mill.bsp.worker.MillBuildServer.$anonfun$completable$1(MillBuildServer.scala:730) at mill.bsp.worker.MillBuildServer.$anonfun$completable$1$adapted(MillBuildServer.scala:727) at mill.bsp.worker.MillBuildServer$$Lambda$208/0x0000000800dd9178.apply(Unknown Source) at scala.concurrent.impl.Promise$Transformation.run(Promise.scala:484) at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(java.base@17.0.6/ForkJoinTask.java:1395) at java.util.concurrent.ForkJoinTask.doExec(java.base@17.0.6/ForkJoinTask.java:373) at java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(java.base@17.0.6/ForkJoinPool.java:1182) at java.util.concurrent.ForkJoinPool.scan(java.base@17.0.6/ForkJoinPool.java:1655) at java.util.concurrent.ForkJoinPool.runWorker(java.base@17.0.6/ForkJoinPool.java:1622) at java.util.concurrent.ForkJoinWorkerThread.run(java.base@17.0.6/ForkJoinWorkerThread.java:165) "scala-execution-context-global-22": at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:9) - waiting to lock <0x0000000601750f38> (a millbuild.build$scalalib$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at mill.scalalib.ScalaModule.compile(ScalaModule.scala:280) at mill.scalalib.ScalaModule.compile$(ScalaModule.scala:280) at millbuild.build$scalalib$.compile(build.sc:728) at mill.scalalib.JavaModule.$anonfun$upstreamCompileOutput$2(JavaModule.scala:268) at mill.scalalib.JavaModule$$Lambda$678/0x0000000800eaca38.apply(Unknown Source) at scala.collection.immutable.List.map(List.scala:246) at scala.collection.immutable.List.map(List.scala:79) at mill.define.Target$.traverse(Task.scala:330) at mill.scalalib.JavaModule.$anonfun$upstreamCompileOutput$1(JavaModule.scala:268) at mill.scalalib.JavaModule$$Lambda$677/0x0000000800eac778.apply(Unknown Source) at scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:469) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:10) - locked <0x00000006018ea698> (a millbuild.build$runner$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at mill.scalalib.JavaModule.upstreamCompileOutput(JavaModule.scala:267) at mill.scalalib.JavaModule.upstreamCompileOutput$(JavaModule.scala:267) at millbuild.build$runner$.upstreamCompileOutput(build.sc:1403) at mill.scalalib.ScalaModule.$anonfun$compile$1(ScalaModule.scala:290) at mill.scalalib.ScalaModule$$Lambda$670/0x0000000800ea9c28.apply(Unknown Source) at scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:469) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:10) - locked <0x00000006018ea698> (a millbuild.build$runner$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at mill.scalalib.ScalaModule.compile(ScalaModule.scala:280) at mill.scalalib.ScalaModule.compile$(ScalaModule.scala:280) at millbuild.build$runner$.compile(build.sc:1403) at mill.scalalib.JavaModule.$anonfun$upstreamCompileOutput$2(JavaModule.scala:268) at mill.scalalib.JavaModule$$Lambda$678/0x0000000800eaca38.apply(Unknown Source) at scala.collection.immutable.List.map(List.scala:246) at scala.collection.immutable.List.map(List.scala:79) at mill.define.Target$.traverse(Task.scala:330) at mill.scalalib.JavaModule.$anonfun$upstreamCompileOutput$1(JavaModule.scala:268) at mill.scalalib.JavaModule$$Lambda$677/0x0000000800eac778.apply(Unknown Source) at scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:469) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:10) - locked <0x00000006019e70f0> (a millbuild.build$dist$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at mill.scalalib.JavaModule.upstreamCompileOutput(JavaModule.scala:267) at mill.scalalib.JavaModule.upstreamCompileOutput$(JavaModule.scala:267) at millbuild.build$dist$.upstreamCompileOutput(build.sc:1417) at mill.scalalib.JavaModule.$anonfun$compile$1(JavaModule.scala:409) at mill.scalalib.JavaModule$$Lambda$3166/0x000000080127dcf8.apply(Unknown Source) at scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:469) at mill.moduledefs.Cacher.cachedTarget(Cacher.scala:10) - locked <0x00000006019e70f0> (a millbuild.build$dist$) at mill.moduledefs.Cacher.cachedTarget$(Cacher.scala:9) at mill.define.Module$BaseClass.cachedTarget(Module.scala:58) at mill.scalalib.JavaModule.compile(JavaModule.scala:405) at mill.scalalib.JavaModule.compile$(JavaModule.scala:405) at millbuild.build$dist$.compile(build.sc:1417) at mill.scalalib.JavaModule.bspCompileClassesPath(JavaModule.scala:428) at mill.scalalib.JavaModule.bspCompileClassesPath$(JavaModule.scala:427) at millbuild.build$dist$.bspCompileClassesPath(build.sc:1417) at mill.bsp.worker.MillJavaBuildServer.$anonfun$buildTargetJavacOptions$2(MillJavaBuildServer.scala:27) at mill.bsp.worker.MillJavaBuildServer$$Lambda$3154/0x0000000801272aa0.apply(Unknown Source) at mill.bsp.worker.MillBuildServer.$anonfun$completableTasks$2(MillBuildServer.scala:661) at mill.bsp.worker.MillBuildServer$$Lambda$3008/0x0000000800ddb678.apply(Unknown Source) at scala.collection.immutable.List.map(List.scala:250) at scala.collection.immutable.List.map(List.scala:79) at mill.bsp.worker.MillBuildServer.$anonfun$completableTasks$1(MillBuildServer.scala:659) at mill.bsp.worker.MillBuildServer$$Lambda$207/0x0000000800dd8da8.apply(Unknown Source) at mill.bsp.worker.MillBuildServer.$anonfun$completable$1(MillBuildServer.scala:730) at mill.bsp.worker.MillBuildServer.$anonfun$completable$1$adapted(MillBuildServer.scala:727) at mill.bsp.worker.MillBuildServer$$Lambda$208/0x0000000800dd9178.apply(Unknown Source) at scala.concurrent.impl.Promise$Transformation.run(Promise.scala:484) at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(java.base@17.0.6/ForkJoinTask.java:1395) at java.util.concurrent.ForkJoinTask.doExec(java.base@17.0.6/ForkJoinTask.java:373) at java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(java.base@17.0.6/ForkJoinPool.java:1182) at java.util.concurrent.ForkJoinPool.scan(java.base@17.0.6/ForkJoinPool.java:1655) at java.util.concurrent.ForkJoinPool.runWorker(java.base@17.0.6/ForkJoinPool.java:1622) at java.util.concurrent.ForkJoinWorkerThread.run(java.base@17.0.6/ForkJoinWorkerThread.java:165) Found 1 deadlock. ```
lihaoyi commented 3 months ago

I think the issue is that concurrent lazy initialization of the module tree can cause deadlocks in a scenario like


object Foo{
  val bar = Baz
}
object Baz{
  val qux = Foo
}

In this case, A thread accessingFoo.bar and another thread accessing Baz.qux can deadlock as follows:

Not totally sure, but that's what it seems the stack trace is describing. In the case of Mill, the objects are the Modules, and the references between the objects are the edges in the target graph, with some subtlety around laziness in the target graph that makes it not trigger every time

lihaoyi commented 3 months ago

From the stack trace, it seems the issue is that IntelliJ is asking Mill to compute both buildTargetJavacOptions and buildTargetScalacOptions concurrently in two separate requests to the same JVM. It's nothing to do with the --jobs flag which enables parallelism within a single request, and it takes place during module-initialization time before any evaluation (single-threaded or parallel) takes place. It also doesn't require any cycles in the target graph, only cycles at the module level where two modules refer to each others targets

Maybe we can put a big coarse-grained lock around BSP, so that Mill only serves one ongoing BSP request at a time? In general I don't think Mill's codebase is designed to handle concurrency at the moment, and running the requests sequentially should be fast enough due to caching that BSP-request-level parallelism isn't necessary. While we could put in the work to make the entire codebase threadsafe, it feels like just forcing a coarse-grained lock is good enough. That's what Bazel does, to an even greater extent (they disallow multiple processes running at the same time as well)

lefou commented 3 months ago

Maybe, we can lock the module-initialization phase and after that revert to the current behavior?

lihaoyi commented 3 months ago

That works too. I guess it depends on how much we really want to support concurrent evaluation. My feeling is that the long tail of concurrency issues we're going to be dealing with would outweigh the marginal benefits of occasionally being able to run the evaluator in parallel in a single JVM, which basically only happens during BSP and nowhere else (since the CLI runs concurrent Mill commands in separate JVMs anyway)

lihaoyi commented 3 months ago

One thing to consider is that because we only run parallel Mill evaluations within the same JVM in BSP, that means we should expect it to continually surface bugs that do not get caught otherwise in interactive use. If we ran Mill parallel within the same JVM in normal usage, at least both BSP and CLI would go through the same code paths, and bugs found and fixed in one would stay fixed in the other. But if we continue to have BSP go thread-parallel while CLI go process-parallel, the bugs in each case would be independent, and we would find it impossible to reproduce BSP concurrency issues via the CLI

Given that, it seems pretty clear to me that putting a coarse-grained lock around the BSP code path is the right thing to do. Better one standardized well-tested code path than having two totally different concurrency model, especially given how tricky concurrency issues are to surface, reproduce, and fix. I think if people had to make a choice between slightly-slower-BSP-import v.s. nondeterministic deadlocks and race conditions, they would pick the slightly-slower-BSP-imports every time