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.
This commit is contained in:
Ethan Atkins 2020-09-11 11:39:52 -07:00
parent 4a2bf67eb8
commit 5e88d4b233
1 changed files with 12 additions and 6 deletions

View File

@ -9,7 +9,7 @@ package sbt
package internal package internal
import java.util.concurrent.atomic.{ AtomicBoolean, AtomicInteger, AtomicReference } import java.util.concurrent.atomic.{ AtomicBoolean, AtomicInteger, AtomicReference }
import java.util.concurrent.TimeUnit import java.util.concurrent.{ RejectedExecutionException, TimeUnit }
import sbt.internal.util._ import sbt.internal.util._
@ -46,11 +46,17 @@ private[sbt] class TaskProgress(
} }
} }
val delay = duration.toMillis val delay = duration.toMillis
val future = try {
if (recurring) scheduler.schedule(runnable, delay, TimeUnit.MILLISECONDS) val future =
else scheduler.scheduleAtFixedRate(runnable, delay, delay, TimeUnit.MILLISECONDS) if (recurring) scheduler.schedule(runnable, delay, TimeUnit.MILLISECONDS)
pending.add(future) else scheduler.scheduleAtFixedRate(runnable, delay, delay, TimeUnit.MILLISECONDS)
() => Util.ignoreResult(future.cancel(true)) pending.add(future)
() => Util.ignoreResult(future.cancel(true))
} catch {
case e: RejectedExecutionException =>
logger.trace(e)
() => ()
}
} else { } else {
logger.debug("tried to call schedule on closed TaskProgress") logger.debug("tried to call schedule on closed TaskProgress")
() => () () => ()