diff options
author | Philipp Haller <hallerp@gmail.com> | 2010-04-13 11:37:42 +0000 |
---|---|---|
committer | Philipp Haller <hallerp@gmail.com> | 2010-04-13 11:37:42 +0000 |
commit | aad801fc89b24843497963b14b6c96ed1ce77c06 (patch) | |
tree | dc6a2effbb06a54366d7e0b8a07275c8e6315406 /src/actors/scala/actors/IScheduler.scala | |
parent | ea91456310736caed3064c117c5a72f515d59688 (diff) | |
download | scala-aad801fc89b24843497963b14b6c96ed1ce77c06.tar.gz scala-aad801fc89b24843497963b14b6c96ed1ce77c06.tar.bz2 scala-aad801fc89b24843497963b14b6c96ed1ce77c06.zip |
Improved handling of uncaught exceptions in act...
Improved handling of uncaught exceptions in actors. See #711. Review by
community.
Diffstat (limited to 'src/actors/scala/actors/IScheduler.scala')
-rw-r--r-- | src/actors/scala/actors/IScheduler.scala | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/actors/scala/actors/IScheduler.scala b/src/actors/scala/actors/IScheduler.scala index 1718dab045..f65aa020f8 100644 --- a/src/actors/scala/actors/IScheduler.scala +++ b/src/actors/scala/actors/IScheduler.scala @@ -68,6 +68,25 @@ trait IScheduler { def managedBlock(blocker: scala.concurrent.ManagedBlocker): Unit + /** This method is called when an exception is not handled by + * some reactor while processing a certain message. + * + * @param t the unhandled exception + * @param reactor the reactor inside which the exception was thrown + * @param msg the message last removed from the reactor's mailbox + */ + def handleUncaughtThrowable[Msg >: Null](t: Throwable, reactor: Reactor[Msg], msg: Msg) { + // print message on default error stream + val msgException = "Uncaught exception in "+reactor+"\n" + val msgMessage = if (msg != null) "Message: "+msg+"\n" else "" + Debug.doWarning { + Console.err.print(msgException + msgMessage) + t.printStackTrace() + } + if (t.isInstanceOf[Error]) + throw t + } + @deprecated("this member is going to be removed in a future release") def tick(a: Actor) {} |