diff options
author | Philipp Haller <hallerp@gmail.com> | 2009-01-03 15:09:03 +0000 |
---|---|---|
committer | Philipp Haller <hallerp@gmail.com> | 2009-01-03 15:09:03 +0000 |
commit | 1805207276e1ef370383735538121610b41934d3 (patch) | |
tree | 40c53c4487b72e931d81e3b8fc4c882942b950f8 /src/actors | |
parent | a405c1e0f278e78c9c7e9957f439a60aae2801e1 (diff) | |
download | scala-1805207276e1ef370383735538121610b41934d3.tar.gz scala-1805207276e1ef370383735538121610b41934d3.tar.bz2 scala-1805207276e1ef370383735538121610b41934d3.zip |
Make semantics of zero timeout in reactWithin a...
Make semantics of zero timeout in reactWithin and receiveWithin more
uniform.
Diffstat (limited to 'src/actors')
-rw-r--r-- | src/actors/scala/actors/Actor.scala | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/src/actors/scala/actors/Actor.scala b/src/actors/scala/actors/Actor.scala index ad0927195e..cdc503cb52 100644 --- a/src/actors/scala/actors/Actor.scala +++ b/src/actors/scala/actors/Actor.scala @@ -458,9 +458,10 @@ trait Actor extends AbstractActor { val qel = mailbox.extractFirst((m: Any) => f.isDefinedAt(m)) if (null eq qel) { if (msec == 0) { - if (f.isDefinedAt(TIMEOUT)) - return f(TIMEOUT) - else + if (f.isDefinedAt(TIMEOUT)) { + received = Some(TIMEOUT) + sessions = this :: sessions + } else error("unhandled timeout") } else { @@ -470,10 +471,8 @@ trait Actor extends AbstractActor { suspendActorFor(msec) if (received.isEmpty) { if (f.isDefinedAt(TIMEOUT)) { - waitingFor = waitingForNone - isSuspended = false - val result = f(TIMEOUT) - return result + received = Some(TIMEOUT) + sessions = this :: sessions } else error("unhandled timeout") @@ -537,7 +536,7 @@ trait Actor extends AbstractActor { if (null eq qel) { if (msec == 0) { if (f.isDefinedAt(TIMEOUT)) { - sessions = List(Actor.self) + sessions = List(this) scheduleActor(f, TIMEOUT) } else @@ -548,7 +547,7 @@ trait Actor extends AbstractActor { val thisActor = this onTimeout = Some(new TimerTask { - def run() { thisActor ! TIMEOUT } + def run() { thisActor.send(TIMEOUT, thisActor) } }) Actor.timer.schedule(onTimeout.get, msec) |