From e465aee36abc3f6c52964e8a4fdb0232dd25e996 Mon Sep 17 00:00:00 2001 From: veera venky Date: Wed, 13 Jun 2018 03:06:30 +0530 Subject: [PATCH 1/2] Fix for #4191 (active.json should be removed on JVM shutdown) Added a shutdown hook to clean up active.json file --- main/src/main/scala/sbt/Main.scala | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/main/src/main/scala/sbt/Main.scala b/main/src/main/scala/sbt/Main.scala index 65b436be0..67bc59857 100644 --- a/main/src/main/scala/sbt/Main.scala +++ b/main/src/main/scala/sbt/Main.scala @@ -105,11 +105,18 @@ object StandardMain { import scalacache.caffeine._ private[sbt] lazy val cache: Cache[Any] = CaffeineCache[Any] + private[sbt] val shutdownHook = new Thread(new Runnable { + def run(): Unit = { + exchange.shutdown + } + }) + def runManaged(s: State): xsbti.MainResult = { val previous = TrapExit.installManager() try { try { try { + Runtime.getRuntime.addShutdownHook(shutdownHook) MainLoop.runLogged(s) } finally exchange.shutdown } finally DefaultBackgroundJobService.backgroundJobService.shutdown() From e3c9eb0cd9dded109deaa08df4da4ad1eb17a265 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Thu, 14 Jun 2018 05:09:00 -0400 Subject: [PATCH 2/2] Remove the shutdown hook when it's done --- main/src/main/scala/sbt/Main.scala | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/main/src/main/scala/sbt/Main.scala b/main/src/main/scala/sbt/Main.scala index 67bc59857..920a0c302 100644 --- a/main/src/main/scala/sbt/Main.scala +++ b/main/src/main/scala/sbt/Main.scala @@ -115,10 +115,20 @@ object StandardMain { val previous = TrapExit.installManager() try { try { - try { + val hooked = try { Runtime.getRuntime.addShutdownHook(shutdownHook) + true + } catch { + case _: IllegalArgumentException => false + } + try { MainLoop.runLogged(s) - } finally exchange.shutdown + } finally { + exchange.shutdown + if (hooked) { + Runtime.getRuntime.removeShutdownHook(shutdownHook) + } + } } finally DefaultBackgroundJobService.backgroundJobService.shutdown() } finally TrapExit.uninstallManager(previous) }