From 5e88d4b2336c7bf1d0aca34c1d15dc94a224d098 Mon Sep 17 00:00:00 2001 From: Ethan Atkins Date: Fri, 11 Sep 2020 11:39:52 -0700 Subject: [PATCH] Warn on progress RejectedExecutionException It shouldn't be the case that a RejectedExecutionException is thrown by TaskProgress. If that assumption is violated, log the exception but don't crash sbt. --- .../main/scala/sbt/internal/TaskProgress.scala | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/main/src/main/scala/sbt/internal/TaskProgress.scala b/main/src/main/scala/sbt/internal/TaskProgress.scala index f05e15ce4..cc741bb5a 100644 --- a/main/src/main/scala/sbt/internal/TaskProgress.scala +++ b/main/src/main/scala/sbt/internal/TaskProgress.scala @@ -9,7 +9,7 @@ package sbt package internal import java.util.concurrent.atomic.{ AtomicBoolean, AtomicInteger, AtomicReference } -import java.util.concurrent.TimeUnit +import java.util.concurrent.{ RejectedExecutionException, TimeUnit } import sbt.internal.util._ @@ -46,11 +46,17 @@ private[sbt] class TaskProgress( } } val delay = duration.toMillis - val future = - if (recurring) scheduler.schedule(runnable, delay, TimeUnit.MILLISECONDS) - else scheduler.scheduleAtFixedRate(runnable, delay, delay, TimeUnit.MILLISECONDS) - pending.add(future) - () => Util.ignoreResult(future.cancel(true)) + try { + val future = + if (recurring) scheduler.schedule(runnable, delay, TimeUnit.MILLISECONDS) + else scheduler.scheduleAtFixedRate(runnable, delay, delay, TimeUnit.MILLISECONDS) + pending.add(future) + () => Util.ignoreResult(future.cancel(true)) + } catch { + case e: RejectedExecutionException => + logger.trace(e) + () => () + } } else { logger.debug("tried to call schedule on closed TaskProgress") () => ()