summaryrefslogtreecommitdiff
path: root/src/actors
diff options
context:
space:
mode:
authorPhilipp Haller <hallerp@gmail.com>2009-05-04 10:30:31 +0000
committerPhilipp Haller <hallerp@gmail.com>2009-05-04 10:30:31 +0000
commitf461ac7401a16e8b2f0c06ed49fe1fcadc1b50b5 (patch)
tree3c9d759ac15755ae4965e38a342fc99a4e265174 /src/actors
parente8cdd793c538a020d279723e942c226072be7894 (diff)
downloadscala-f461ac7401a16e8b2f0c06ed49fe1fcadc1b50b5.tar.gz
scala-f461ac7401a16e8b2f0c06ed49fe1fcadc1b50b5.tar.bz2
scala-f461ac7401a16e8b2f0c06ed49fe1fcadc1b50b5.zip
Fixed potential memory leak.
Diffstat (limited to 'src/actors')
-rw-r--r--src/actors/scala/actors/Actor.scala18
1 files changed, 9 insertions, 9 deletions
diff --git a/src/actors/scala/actors/Actor.scala b/src/actors/scala/actors/Actor.scala
index 0f5faedd50..8c98f45d41 100644
--- a/src/actors/scala/actors/Actor.scala
+++ b/src/actors/scala/actors/Actor.scala
@@ -403,13 +403,6 @@ trait Actor extends AbstractActor {
*/
def send(msg: Any, replyTo: OutputChannel[Any]) = synchronized {
if (waitingFor(msg)) {
- received = Some(msg)
-
- if (isSuspended)
- sessions = replyTo :: sessions
- else
- sessions = List(replyTo)
-
waitingFor = waitingForNone
if (!onTimeout.isEmpty) {
@@ -417,10 +410,15 @@ trait Actor extends AbstractActor {
onTimeout = None
}
- if (isSuspended)
+ if (isSuspended) {
+ sessions = replyTo :: sessions
+ received = Some(msg)
resumeActor()
- else // assert continuation != null
+ } else {
+ sessions = List(replyTo)
+ // assert continuation != null
scheduler.execute(new Reaction(this, continuation, msg))
+ }
} else {
mailbox.append(msg, replyTo)
}
@@ -446,6 +444,7 @@ trait Actor extends AbstractActor {
}
}
val result = f(received.get)
+ received = None
sessions = sessions.tail
result
}
@@ -496,6 +495,7 @@ trait Actor extends AbstractActor {
}
}
val result = f(received.get)
+ received = None
sessions = sessions.tail
result
}