diff options
author | Philipp Haller <hallerp@gmail.com> | 2009-05-04 10:30:31 +0000 |
---|---|---|
committer | Philipp Haller <hallerp@gmail.com> | 2009-05-04 10:30:31 +0000 |
commit | f461ac7401a16e8b2f0c06ed49fe1fcadc1b50b5 (patch) | |
tree | 3c9d759ac15755ae4965e38a342fc99a4e265174 /src/actors | |
parent | e8cdd793c538a020d279723e942c226072be7894 (diff) | |
download | scala-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.scala | 18 |
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 } |