From 8903abb23014f7fabe4ce4172a7ef97b4066f808 Mon Sep 17 00:00:00 2001 From: Viktor Klang Date: Tue, 29 May 2012 15:20:26 +0200 Subject: [PATCH] Making sure Watch messages are handled by DeadLetterActorRef + EmptyLocalActorRef --- akka-actor/src/main/scala/akka/actor/ActorRef.scala | 10 ++++++---- akka-actor/src/main/scala/akka/actor/ActorSystem.scala | 6 ++++-- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/akka-actor/src/main/scala/akka/actor/ActorRef.scala b/akka-actor/src/main/scala/akka/actor/ActorRef.scala index 5e3de885ea..042a5cdd6a 100644 --- a/akka-actor/src/main/scala/akka/actor/ActorRef.scala +++ b/akka-actor/src/main/scala/akka/actor/ActorRef.scala @@ -421,8 +421,9 @@ private[akka] class EmptyLocalActorRef(override val provider: ActorRefProvider, } override def !(message: Any)(implicit sender: ActorRef = null): Unit = message match { - case d: DeadLetter ⇒ // do NOT form endless loops, since deadLetters will resend! - case _ ⇒ eventStream.publish(DeadLetter(message, sender, this)) + case DeadLetter(w: Watch, _, _) ⇒ sendSystemMessage(w) + case d: DeadLetter ⇒ // do NOT form endless loops, since deadLetters will resend! + case _ ⇒ eventStream.publish(DeadLetter(message, sender, this)) } } @@ -442,8 +443,9 @@ private[akka] class DeadLetterActorRef(_provider: ActorRefProvider, } override def !(message: Any)(implicit sender: ActorRef = this): Unit = message match { - case d: DeadLetter ⇒ eventStream.publish(d) - case _ ⇒ eventStream.publish(DeadLetter(message, sender, this)) + case DeadLetter(w: Watch, _, _) ⇒ sendSystemMessage(w) + case d: DeadLetter ⇒ eventStream.publish(d) + case _ ⇒ eventStream.publish(DeadLetter(message, sender, this)) } @throws(classOf[java.io.ObjectStreamException]) diff --git a/akka-actor/src/main/scala/akka/actor/ActorSystem.scala b/akka-actor/src/main/scala/akka/actor/ActorSystem.scala index 94ee24336a..993e7e98e4 100644 --- a/akka-actor/src/main/scala/akka/actor/ActorSystem.scala +++ b/akka-actor/src/main/scala/akka/actor/ActorSystem.scala @@ -542,7 +542,8 @@ private[akka] class ActorSystemImpl(val name: String, applicationConfig: Config, //FIXME Why do we need this at all? val deadLetterQueue: MessageQueue = new MessageQueue { - def enqueue(receiver: ActorRef, envelope: Envelope) { deadLetters ! DeadLetter(envelope.message, envelope.sender, receiver) } + def enqueue(receiver: ActorRef, envelope: Envelope): Unit = + deadLetters ! DeadLetter(envelope.message, envelope.sender, receiver) def dequeue() = null def hasMessages = false def numberOfMessages = 0 @@ -551,7 +552,8 @@ private[akka] class ActorSystemImpl(val name: String, applicationConfig: Config, //FIXME Why do we need this at all? val deadLetterMailbox: Mailbox = new Mailbox(null, deadLetterQueue) { becomeClosed() - def systemEnqueue(receiver: ActorRef, handle: SystemMessage): Unit = deadLetters ! DeadLetter(handle, receiver, receiver) + def systemEnqueue(receiver: ActorRef, handle: SystemMessage): Unit = + deadLetters ! DeadLetter(handle, receiver, receiver) def systemDrain(): SystemMessage = null def hasSystemMessages = false }