From 6c1ca7fcdbbb4ecc51cfe71d9813f7cca41d37f1 Mon Sep 17 00:00:00 2001 From: Viktor Klang Date: Wed, 30 May 2012 14:26:09 +0200 Subject: [PATCH] Unborkening the top-level surveillance --- .../src/main/scala/akka/actor/ActorCell.scala | 8 ++++---- .../scala/akka/actor/ActorRefProvider.scala | 20 +++++++------------ 2 files changed, 11 insertions(+), 17 deletions(-) diff --git a/akka-actor/src/main/scala/akka/actor/ActorCell.scala b/akka-actor/src/main/scala/akka/actor/ActorCell.scala index 4e8a54d7fb..1f5fa72c68 100644 --- a/akka-actor/src/main/scala/akka/actor/ActorCell.scala +++ b/akka-actor/src/main/scala/akka/actor/ActorCell.scala @@ -462,7 +462,7 @@ private[akka] class ActorCell( override final def watch(subject: ActorRef): ActorRef = subject match { case a: InternalActorRef ⇒ - if (!watching.contains(a)) { + if (a != self && !watching.contains(a)) { a.sendSystemMessage(Watch(a, self)) // ➡➡➡ NEVER SEND THE SAME SYSTEM MESSAGE OBJECT TO TWO ACTORS ⬅⬅⬅ watching += a } @@ -471,7 +471,7 @@ private[akka] class ActorCell( override final def unwatch(subject: ActorRef): ActorRef = subject match { case a: InternalActorRef ⇒ - if (watching.contains(a)) { + if (a != self && watching.contains(a)) { a.sendSystemMessage(Unwatch(a, self)) // ➡➡➡ NEVER SEND THE SAME SYSTEM MESSAGE OBJECT TO TWO ACTORS ⬅⬅⬅ watching -= a } @@ -582,7 +582,7 @@ private[akka] class ActorCell( } } else if (!watcheeSelf && watcherSelf) { watch(watchee) - } else println("addNOOOOOOOOO: " + watchee + " => " + watcher) + } } def remWatcher(watchee: ActorRef, watcher: ActorRef): Unit = { @@ -596,7 +596,7 @@ private[akka] class ActorCell( } } else if (!watcheeSelf && watcherSelf) { unwatch(watchee) - } else println("remNOOOOOOOOO: " + watchee + " => " + watcher) + } } def terminate() { diff --git a/akka-actor/src/main/scala/akka/actor/ActorRefProvider.scala b/akka-actor/src/main/scala/akka/actor/ActorRefProvider.scala index d4e9595f62..3d9563b987 100644 --- a/akka-actor/src/main/scala/akka/actor/ActorRefProvider.scala +++ b/akka-actor/src/main/scala/akka/actor/ActorRefProvider.scala @@ -474,18 +474,10 @@ class LocalActorRefProvider( lazy val rootGuardian: InternalActorRef = new LocalActorRef(system, guardianProps, theOneWhoWalksTheBubblesOfSpaceTime, rootPath, true) { - object Extra { - def unapply(s: String): Option[InternalActorRef] = extraNames.get(s) - } - override def getParent: InternalActorRef = this - - override def getSingleChild(name: String): InternalActorRef = { - name match { - case "temp" ⇒ tempContainer - case Extra(e) ⇒ e - case _ ⇒ super.getSingleChild(name) - } + override def getSingleChild(name: String): InternalActorRef = name match { + case "temp" ⇒ tempContainer + case other ⇒ extraNames.get(other).getOrElse(super.getSingleChild(other)) } } @@ -510,8 +502,10 @@ class LocalActorRefProvider( def init(_system: ActorSystemImpl) { system = _system // chain death watchers so that killing guardian stops the application - guardian.sendSystemMessage(Watch(systemGuardian, guardian)) - rootGuardian.sendSystemMessage(Watch(rootGuardian, systemGuardian)) + //guardian.sendSystemMessage(Watch(systemGuardian, guardian)) + //rootGuardian.sendSystemMessage(Watch(rootGuardian, systemGuardian)) + guardian.sendSystemMessage(Watch(guardian, systemGuardian)) + rootGuardian.sendSystemMessage(Watch(systemGuardian, rootGuardian)) eventStream.startDefaultLoggers(_system) }