From 748dfd6e673f2ccd5bd2b40ad0bca52bbd63fbed Mon Sep 17 00:00:00 2001 From: Ethan Atkins Date: Thu, 5 Nov 2020 11:09:00 -0800 Subject: [PATCH] Throw timeoutexception in JoinThread Rather than throwing an interrupted exception if we fail to join a thread, we should throw a timeout exception. --- .../src/main/scala/sbt/internal/util/JoinThread.scala | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/main-command/src/main/scala/sbt/internal/util/JoinThread.scala b/main-command/src/main/scala/sbt/internal/util/JoinThread.scala index 0f70a902e..4c3d109f4 100644 --- a/main-command/src/main/scala/sbt/internal/util/JoinThread.scala +++ b/main-command/src/main/scala/sbt/internal/util/JoinThread.scala @@ -9,23 +9,22 @@ package sbt.internal.util import scala.annotation.tailrec import scala.concurrent.duration._ +import java.util.concurrent.TimeoutException object JoinThread { implicit class ThreadOps(val t: Thread) extends AnyVal { def joinFor(duration: FiniteDuration): Unit = { val deadline = duration.fromNow - var exception: Option[InterruptedException] = None @tailrec def impl(): Unit = { try { t.interrupt() t.join(10) - } catch { case e: InterruptedException => exception = Some(e) } + } catch { case e: InterruptedException => } if (t.isAlive && !deadline.isOverdue) impl() } impl() if (t.isAlive) { - System.err.println(s"Unable to join thread $t after $duration") - exception.foreach(throw _) + throw new TimeoutException(s"Unable to join thread $t after $duration") } } }