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