From 8c2ed8bd03103191c5b2829c54ebb6772e5645fd Mon Sep 17 00:00:00 2001 From: Viktor Klang Date: Thu, 11 Nov 2010 18:19:45 +0100 Subject: [PATCH] Fixing #522 --- akka-actor/src/main/scala/actor/Actor.scala | 8 +++++++- akka-actor/src/main/scala/actor/UntypedActor.scala | 8 +++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/akka-actor/src/main/scala/actor/Actor.scala b/akka-actor/src/main/scala/actor/Actor.scala index 46297d32d0..dc74028964 100644 --- a/akka-actor/src/main/scala/actor/Actor.scala +++ b/akka-actor/src/main/scala/actor/Actor.scala @@ -413,8 +413,14 @@ trait Actor extends Logging { /** * Changes tha Actor's behavior to become the new 'Receive' (PartialFunction[Any, Unit]) handler. * Puts the behavior on top of the hotswap stack. + * If "discardOld" is true, an unbecome will be issued prior to pushing the new behavior to the stack */ - def become(behavior: Receive): Unit = self.hotswap = self.hotswap.push(behavior) + def become(behavior: Receive, discardOld: Boolean = false) { + if (discardOld) + unbecome + + self.hotswap = self.hotswap.push(behavior) + } /** * Reverts the Actor behavior to the previous one in the hotswap stack. diff --git a/akka-actor/src/main/scala/actor/UntypedActor.scala b/akka-actor/src/main/scala/actor/UntypedActor.scala index e36a7837b6..b31077c8f3 100644 --- a/akka-actor/src/main/scala/actor/UntypedActor.scala +++ b/akka-actor/src/main/scala/actor/UntypedActor.scala @@ -72,7 +72,13 @@ abstract class UntypedActor extends Actor { /** * Java API for become */ - def become(behavior: Procedure[Any]): Unit = super.become { case msg => behavior.apply(msg) } + def become(behavior: Procedure[Any]):Unit = become(behavior,false) + + /* + * Java API for become with optional discardOld + */ + def become(behavior: Procedure[Any], discardOld: Boolean): Unit = + super.become({ case msg => behavior.apply(msg) }, discardOld) @throws(classOf[Exception]) def onReceive(message: Any): Unit