summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPhilipp Haller <hallerp@gmail.com>2009-01-03 15:09:03 +0000
committerPhilipp Haller <hallerp@gmail.com>2009-01-03 15:09:03 +0000
commit1805207276e1ef370383735538121610b41934d3 (patch)
tree40c53c4487b72e931d81e3b8fc4c882942b950f8 /src
parenta405c1e0f278e78c9c7e9957f439a60aae2801e1 (diff)
downloadscala-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')
-rw-r--r--src/actors/scala/actors/Actor.scala17
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)