From bf596f93d15bcb0f496c6d9c565f34c65c90a9a0 Mon Sep 17 00:00:00 2001 From: eugene yokota Date: Fri, 20 Nov 2020 10:05:53 -0500 Subject: [PATCH] Merge pull request #6130 from eatkins/scripted-hangs Stop CI hangs in background job service shutdown --- .../sbt/internal/DefaultBackgroundJobService.scala | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/main/src/main/scala/sbt/internal/DefaultBackgroundJobService.scala b/main/src/main/scala/sbt/internal/DefaultBackgroundJobService.scala index 21a3615fd..fa16e888d 100644 --- a/main/src/main/scala/sbt/internal/DefaultBackgroundJobService.scala +++ b/main/src/main/scala/sbt/internal/DefaultBackgroundJobService.scala @@ -179,11 +179,15 @@ private[sbt] abstract class AbstractBackgroundJobService extends BackgroundJobSe override final def close(): Unit = shutdown() override def shutdown(): Unit = { - while (jobSet.nonEmpty) { + val deadline = 10.seconds.fromNow + while (jobSet.nonEmpty && !deadline.isOverdue) { jobSet.headOption.foreach { case handle: ThreadJobHandle @unchecked => - handle.job.shutdown() - handle.job.awaitTerminationTry(10.seconds) + if (handle.job.isRunning) { + handle.job.shutdown() + handle.job.awaitTerminationTry(10.seconds) + } + jobSet = jobSet - handle case _ => // } }