Ticket 1005: Changed WeakReference to lookup by uuid

This commit is contained in:
Patrik Nordwall 2011-07-12 09:59:11 +02:00
parent 0acc01f207
commit 02dbc4cbad

View file

@ -18,7 +18,6 @@ package akka.actor
import akka.event.EventHandler import akka.event.EventHandler
import akka.AkkaException import akka.AkkaException
import java.util.concurrent.atomic.AtomicLong import java.util.concurrent.atomic.AtomicLong
import java.lang.ref.WeakReference
import java.util.concurrent._ import java.util.concurrent._
import java.lang.RuntimeException import java.lang.RuntimeException
@ -32,15 +31,15 @@ object Scheduler {
private def createSendRunnable(receiver: ActorRef, message: Any, throwWhenReceiverExpired: Boolean): Runnable = { private def createSendRunnable(receiver: ActorRef, message: Any, throwWhenReceiverExpired: Boolean): Runnable = {
receiver match { receiver match {
case local: LocalActorRef => case local: LocalActorRef
val ref = new WeakReference[ActorRef](local) val uuid = local.uuid
new Runnable { new Runnable {
def run = ref.get match { def run = Actor.registry.local.actorFor(uuid) match {
case null => if(throwWhenReceiverExpired) throw new RuntimeException("Receiver not found: GC:ed") case None if (throwWhenReceiverExpired) throw new RuntimeException("Receiver not found, unregistered")
case actor => actor ! message case Some(actor) actor ! message
} }
} }
case other => new Runnable { def run = other ! message } case other new Runnable { def run = other ! message }
} }
} }