diff options
author | Antonio Cunei <antonio.cunei@epfl.ch> | 2010-09-16 09:09:48 +0000 |
---|---|---|
committer | Antonio Cunei <antonio.cunei@epfl.ch> | 2010-09-16 09:09:48 +0000 |
commit | 93bd975a110322c57c1edef91362faccd740ee85 (patch) | |
tree | 27e1a65f52a5aba60b6f1c3707543eb852100ff1 | |
parent | 52a647c94d67dfa39181c165cb9bef041ed1746c (diff) | |
download | scala-93bd975a110322c57c1edef91362faccd740ee85.tar.gz scala-93bd975a110322c57c1edef91362faccd740ee85.tar.bz2 scala-93bd975a110322c57c1edef91362faccd740ee85.zip |
Merged revisions 22988-22989 via svnmerge from
https://lampsvn.epfl.ch/svn-repos/scala/scala/trunk
........
r22988 | eugenevigdorchik | 2010-09-15 11:06:51 +0200 (Wed, 15 Sep 2010) | 1 line
Adding interrupts should wake the server
........
r22989 | eugenevigdorchik | 2010-09-15 11:10:31 +0200 (Wed, 15 Sep 2010) | 1 line
Shield interrupts against exceptions in user code ........
-rw-r--r-- | src/compiler/scala/tools/nsc/util/InterruptReq.scala | 13 | ||||
-rw-r--r-- | src/compiler/scala/tools/nsc/util/WorkScheduler.scala | 1 |
2 files changed, 11 insertions, 3 deletions
diff --git a/src/compiler/scala/tools/nsc/util/InterruptReq.scala b/src/compiler/scala/tools/nsc/util/InterruptReq.scala index aa7804acbe..e7c05beb65 100644 --- a/src/compiler/scala/tools/nsc/util/InterruptReq.scala +++ b/src/compiler/scala/tools/nsc/util/InterruptReq.scala @@ -12,17 +12,24 @@ abstract class InterruptReq { protected val todo: () => R /** The result provided */ - private var result: Option[R] = None + private var result: Option[Either[R, Throwable]] = None /** To be called from interrupted server to execute demanded task */ def execute(): Unit = synchronized { - result = Some(todo()) + try { + result = Some(Left(todo())) + } catch { + case t => result = Some(Right(t)) + } notify() } /** To be called from interrupting client to get result fo interrupt */ def getResult(): R = synchronized { while (result.isEmpty) wait() - result.get + result.get match { + case Left(res) => res + case Right(t) => throw t + } } } diff --git a/src/compiler/scala/tools/nsc/util/WorkScheduler.scala b/src/compiler/scala/tools/nsc/util/WorkScheduler.scala index 5f33ea4aaa..f520aec8bc 100644 --- a/src/compiler/scala/tools/nsc/util/WorkScheduler.scala +++ b/src/compiler/scala/tools/nsc/util/WorkScheduler.scala @@ -52,6 +52,7 @@ class WorkScheduler { } synchronized { interruptReqs enqueue ir + notify() } ir.getResult() } |