diff --git a/akka-actor/src/main/scala/akka/actor/ActorCell.scala b/akka-actor/src/main/scala/akka/actor/ActorCell.scala index fdad22f251..0291cadca0 100644 --- a/akka-actor/src/main/scala/akka/actor/ActorCell.scala +++ b/akka-actor/src/main/scala/akka/actor/ActorCell.scala @@ -65,9 +65,6 @@ private[akka] class ActorCell( val guard = new ReentrantGuard // TODO: remove this last synchronization point - @volatile - var mailbox: Mailbox = _ - @volatile var futureTimeout: Option[ScheduledFuture[AnyRef]] = None @@ -102,10 +99,10 @@ private[akka] class ActorCell( def dispatcher: MessageDispatcher = props.dispatcher def isRunning: Boolean = !isShutdown - def isShutdown: Boolean = mailbox match { - case null ⇒ false - case m ⇒ m.isClosed - } + def isShutdown: Boolean = mailbox.isClosed + + @volatile + var mailbox: Mailbox = dispatcher.createMailbox(this) //FIXME exposing "this" in the constructor is shaky business def start(): Unit = { if (props.supervisor.isDefined) props.supervisor.get.link(self) @@ -274,6 +271,9 @@ private[akka] class ActorCell( } catch { case e ⇒ //Should we really catch everything here? EventHandler.error(e, actor.get(), "error while processing " + envelope.message) + + e.printStackTrace() + throw e } finally { m.become(m.status) diff --git a/akka-actor/src/main/scala/akka/dispatch/MessageHandling.scala b/akka-actor/src/main/scala/akka/dispatch/MessageHandling.scala index cff7f82066..a2cb93a9b7 100644 --- a/akka-actor/src/main/scala/akka/dispatch/MessageHandling.scala +++ b/akka-actor/src/main/scala/akka/dispatch/MessageHandling.scala @@ -164,10 +164,7 @@ abstract class MessageDispatcher extends Serializable { */ protected[akka] def register(actor: ActorCell): Unit = { if (uuids add actor.uuid) { - if (actor.mailbox eq null) { - actor.mailbox = createMailbox(actor) - systemDispatch(SystemEnvelope(actor, Create, NullChannel)) - } + systemDispatch(SystemEnvelope(actor, Create, NullChannel)) //FIXME should this be here or moved into ActorCell.start perhaps? if (active.isOff) { active.switchOn { start()