From 20ccd0230e7976b1ee005b407cb5fd3ef97caf10 Mon Sep 17 00:00:00 2001 From: Martin Krasser Date: Tue, 1 Mar 2011 11:57:00 +0100 Subject: [PATCH] Ensure proper cleanup even if postStop throws an exception. --- .../src/main/scala/akka/actor/ActorRef.scala | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/akka-actor/src/main/scala/akka/actor/ActorRef.scala b/akka-actor/src/main/scala/akka/actor/ActorRef.scala index 98318ea017..6716a7c322 100644 --- a/akka-actor/src/main/scala/akka/actor/ActorRef.scala +++ b/akka-actor/src/main/scala/akka/actor/ActorRef.scala @@ -656,15 +656,18 @@ class LocalActorRef private[akka] ( cancelReceiveTimeout dispatcher.detach(this) _status = ActorRefInternals.SHUTDOWN - actor.postStop - currentMessage = null - Actor.registry.unregister(this) - if (isRemotingEnabled) { - if (isClientManaged_?) - Actor.remote.unregisterClientManagedActor(homeAddress.get.getHostName, homeAddress.get.getPort, uuid) - Actor.remote.unregister(this) + try { + actor.postStop + } finally { + currentMessage = null + Actor.registry.unregister(this) + if (isRemotingEnabled) { + if (isClientManaged_?) + Actor.remote.unregisterClientManagedActor(homeAddress.get.getHostName, homeAddress.get.getPort, uuid) + Actor.remote.unregister(this) + } + setActorSelfFields(actorInstance.get,null) } - setActorSelfFields(actorInstance.get,null) } //else if (isBeingRestarted) throw new ActorKilledException("Actor [" + toString + "] is being restarted.") }