summaryrefslogtreecommitdiff
path: root/clientserver/src/mill/clientserver/ClientServer.scala
diff options
context:
space:
mode:
Diffstat (limited to 'clientserver/src/mill/clientserver/ClientServer.scala')
-rw-r--r--clientserver/src/mill/clientserver/ClientServer.scala22
1 files changed, 16 insertions, 6 deletions
diff --git a/clientserver/src/mill/clientserver/ClientServer.scala b/clientserver/src/mill/clientserver/ClientServer.scala
index 2cc38859..84ea2e00 100644
--- a/clientserver/src/mill/clientserver/ClientServer.scala
+++ b/clientserver/src/mill/clientserver/ClientServer.scala
@@ -48,17 +48,27 @@ object ClientServer{
}
}
- def interruptWith[T](millis: Int, close: => Unit)(t: => T): T = {
- var int = true
+ def interruptWith[T](millis: Int, close: => Unit)(t: => T): Option[T] = {
+ @volatile var interrupt = true
+ @volatile var interrupted = false
new Thread(() => {
Thread.sleep(millis)
- if (int) close
+ if (interrupt) {
+ close
+ interrupted = true
+ }
}).start()
- try t
- finally {
+ try {
+ val res =
+ try Some(t)
+ catch {case e: Throwable => None}
+
+ if (interrupted) None
+ else res
- int = false
+ } finally {
+ interrupt = false
}
}