summaryrefslogtreecommitdiff
path: root/src/actors/scala/actors/IScheduler.scala
diff options
context:
space:
mode:
authorPhilipp Haller <hallerp@gmail.com>2010-04-13 11:37:42 +0000
committerPhilipp Haller <hallerp@gmail.com>2010-04-13 11:37:42 +0000
commitaad801fc89b24843497963b14b6c96ed1ce77c06 (patch)
treedc6a2effbb06a54366d7e0b8a07275c8e6315406 /src/actors/scala/actors/IScheduler.scala
parentea91456310736caed3064c117c5a72f515d59688 (diff)
downloadscala-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.scala19
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) {}