From 63c10ede63c6195088c968e9f1accf0b1d7c9d05 Mon Sep 17 00:00:00 2001 From: Tobias Roeser Date: Wed, 2 Jul 2025 14:26:40 +0200 Subject: [PATCH 1/3] Make most `RunModule.runXxx` commands exclusive Fix https://github.com/com-lihaoyi/mill/issues/5208 --- libs/jvmlib/src/mill/javalib/RunModule.scala | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/libs/jvmlib/src/mill/javalib/RunModule.scala b/libs/jvmlib/src/mill/javalib/RunModule.scala index 9adf8a4ba8df..a2829eddb8c6 100644 --- a/libs/jvmlib/src/mill/javalib/RunModule.scala +++ b/libs/jvmlib/src/mill/javalib/RunModule.scala @@ -110,7 +110,7 @@ trait RunModule extends WithJvmWorkerModule with RunModuleApi { /** * Runs this module's code in a subprocess and waits for it to finish */ - def run(args: Task[Args] = Task.Anon(Args())): Task.Command[Unit] = Task.Command { + def run(args: Task[Args] = Task.Anon(Args())): Task.Command[Unit] = Task.Command(exclusive = true) { runForkedTask(finalMainClass, args)() } @@ -120,7 +120,7 @@ trait RunModule extends WithJvmWorkerModule with RunModuleApi { * since the code can dirty the parent Mill process and potentially leave it * in a bad state. */ - def runLocal(args: Task[Args] = Task.Anon(Args())): Task.Command[Unit] = Task.Command { + def runLocal(args: Task[Args] = Task.Anon(Args())): Task.Command[Unit] = Task.Command(exclusive = true) { runLocalTask(finalMainClass, args)() } @@ -129,7 +129,7 @@ trait RunModule extends WithJvmWorkerModule with RunModuleApi { */ def runMain(@arg(positional = true) mainClass: String, args: String*): Task.Command[Unit] = { val task = runForkedTask(Task.Anon { mainClass }, Task.Anon { Args(args) }) - Task.Command { task() } + Task.Command(exclusive = true) { task() } } /** @@ -148,7 +148,7 @@ trait RunModule extends WithJvmWorkerModule with RunModuleApi { */ def runMainLocal(@arg(positional = true) mainClass: String, args: String*): Task.Command[Unit] = { val task = runLocalTask(Task.Anon { mainClass }, Task.Anon { Args(args) }) - Task.Command { task() } + Task.Command(exclusive = true) { task() } } /** From 51e4fd13f4b098aeb2ecc1cd0ee08ee17b4076b5 Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Wed, 2 Jul 2025 12:29:05 +0000 Subject: [PATCH 2/3] [autofix.ci] apply automated fixes --- libs/jvmlib/src/mill/javalib/RunModule.scala | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/libs/jvmlib/src/mill/javalib/RunModule.scala b/libs/jvmlib/src/mill/javalib/RunModule.scala index a2829eddb8c6..06b1c9a62309 100644 --- a/libs/jvmlib/src/mill/javalib/RunModule.scala +++ b/libs/jvmlib/src/mill/javalib/RunModule.scala @@ -110,9 +110,10 @@ trait RunModule extends WithJvmWorkerModule with RunModuleApi { /** * Runs this module's code in a subprocess and waits for it to finish */ - def run(args: Task[Args] = Task.Anon(Args())): Task.Command[Unit] = Task.Command(exclusive = true) { - runForkedTask(finalMainClass, args)() - } + def run(args: Task[Args] = Task.Anon(Args())): Task.Command[Unit] = + Task.Command(exclusive = true) { + runForkedTask(finalMainClass, args)() + } /** * Runs this module's code in-process within an isolated classloader. This is @@ -120,9 +121,10 @@ trait RunModule extends WithJvmWorkerModule with RunModuleApi { * since the code can dirty the parent Mill process and potentially leave it * in a bad state. */ - def runLocal(args: Task[Args] = Task.Anon(Args())): Task.Command[Unit] = Task.Command(exclusive = true) { - runLocalTask(finalMainClass, args)() - } + def runLocal(args: Task[Args] = Task.Anon(Args())): Task.Command[Unit] = + Task.Command(exclusive = true) { + runLocalTask(finalMainClass, args)() + } /** * Same as `run`, but lets you specify a main class to run From f867544144040e3b145b50594388a17655ed955f Mon Sep 17 00:00:00 2001 From: Tobias Roeser Date: Wed, 9 Jul 2025 11:31:58 +0200 Subject: [PATCH 3/3] Use `runForkedTask` instead of exclusive `run` command --- libs/javalib/src/mill/javalib/bsp/BspRunModule.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/javalib/src/mill/javalib/bsp/BspRunModule.scala b/libs/javalib/src/mill/javalib/bsp/BspRunModule.scala index deb4ad7b884c..56b95f30cb08 100644 --- a/libs/javalib/src/mill/javalib/bsp/BspRunModule.scala +++ b/libs/javalib/src/mill/javalib/bsp/BspRunModule.scala @@ -27,7 +27,7 @@ private[mill] object BspRunModule extends ExternalModule { object internalBspRunModule extends mill.api.Module with BspRunModuleApi { override private[mill] def bspRun(args: Seq[String]): Task[Unit] = Task.Anon { - runModule.run(Task.Anon(Args(args)))() + runModule.runForkedTask(runModule.finalMainClass, Task.Anon(Args(args)))() } override private[mill] def bspJvmRunEnvironment: Task.Simple[(