summaryrefslogtreecommitdiff
path: root/src/actors
diff options
context:
space:
mode:
authorPhilipp Haller <hallerp@gmail.com>2009-05-27 23:27:05 +0000
committerPhilipp Haller <hallerp@gmail.com>2009-05-27 23:27:05 +0000
commit93a27b6d75ad9db73fd8133b3142dd85fc158d5f (patch)
tree1b4fe2def6eb94000087eb70c6b7801561a6e598 /src/actors
parente8e1e61177069cdb89e89b3a41459ae19e84e914 (diff)
downloadscala-93a27b6d75ad9db73fd8133b3142dd85fc158d5f.tar.gz
scala-93a27b6d75ad9db73fd8133b3142dd85fc158d5f.tar.bz2
scala-93a27b6d75ad9db73fd8133b3142dd85fc158d5f.zip
Added exceptionHandler method.
Diffstat (limited to 'src/actors')
-rw-r--r--src/actors/scala/actors/Actor.scala2
-rw-r--r--src/actors/scala/actors/Reaction.scala13
2 files changed, 11 insertions, 4 deletions
diff --git a/src/actors/scala/actors/Actor.scala b/src/actors/scala/actors/Actor.scala
index 29c57620a5..60c3c9a676 100644
--- a/src/actors/scala/actors/Actor.scala
+++ b/src/actors/scala/actors/Actor.scala
@@ -412,6 +412,8 @@ trait Actor extends AbstractActor {
*/
private var onTimeout: Option[TimerTask] = None
+ protected[actors] def exceptionHandler: PartialFunction[Exception, Unit] = Map()
+
protected[actors] def scheduler: IScheduler =
Scheduler
diff --git a/src/actors/scala/actors/Reaction.scala b/src/actors/scala/actors/Reaction.scala
index 54a6b032e2..9a4c67b3be 100644
--- a/src/actors/scala/actors/Reaction.scala
+++ b/src/actors/scala/actors/Reaction.scala
@@ -54,10 +54,15 @@ class Reaction extends Runnable {
a.exit()
else {
try {
- if (f == null)
- a.act()
- else
- f(msg)
+ try {
+ if (f == null)
+ a.act()
+ else
+ f(msg)
+ } catch {
+ case e: Exception if (a.exceptionHandler.isDefinedAt(e)) =>
+ a.exceptionHandler(e)
+ }
} catch {
case _: KillActorException =>
}