summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/actors/scala/actors/Actor.scala12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/actors/scala/actors/Actor.scala b/src/actors/scala/actors/Actor.scala
index 384bfadc1a..af94a8a4e7 100644
--- a/src/actors/scala/actors/Actor.scala
+++ b/src/actors/scala/actors/Actor.scala
@@ -818,7 +818,9 @@ trait Actor extends AbstractActor {
*/
def link(to: AbstractActor): AbstractActor = {
assert(Actor.self == this, "link called on actor different from self")
- links = to :: links
+ synchronized {
+ links = to :: links
+ }
to.linkTo(this)
to
}
@@ -844,7 +846,9 @@ trait Actor extends AbstractActor {
*/
def unlink(from: AbstractActor) {
assert(Actor.self == this, "unlink called on actor different from self")
- links = links.remove(from.==)
+ synchronized {
+ links = links.remove(from.==)
+ }
from.unlinkFrom(this)
}
@@ -892,9 +896,9 @@ trait Actor extends AbstractActor {
private[actors] def exitLinked() {
exiting = true
// remove this from links
- links = links.remove(this.==)
+ val mylinks = links.remove(this.==)
// exit linked processes
- links.foreach((linked: AbstractActor) => {
+ mylinks.foreach((linked: AbstractActor) => {
unlink(linked)
if (!linked.exiting)
linked.exit(this, exitReason)