Ticket 1005: Changed WeakReference to lookup by uuid
This commit is contained in:
parent
0acc01f207
commit
02dbc4cbad
1 changed files with 6 additions and 7 deletions
|
|
@ -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 }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue