diff options
Diffstat (limited to 'clientserver/src/mill/clientserver/ClientServer.scala')
-rw-r--r-- | clientserver/src/mill/clientserver/ClientServer.scala | 22 |
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 } } |