diff options
author | Philipp Haller <hallerp@gmail.com> | 2008-05-05 15:40:58 +0000 |
---|---|---|
committer | Philipp Haller <hallerp@gmail.com> | 2008-05-05 15:40:58 +0000 |
commit | 37b0a629b6490061d57005d909ccd23c6f3c99ea (patch) | |
tree | 2170cccf121f95cb61896e5fd1b71288871d69a0 /src/actors | |
parent | 06efde1f28ec6ad3f0008e3aaf08f292f0ae452f (diff) | |
download | scala-37b0a629b6490061d57005d909ccd23c6f3c99ea.tar.gz scala-37b0a629b6490061d57005d909ccd23c6f3c99ea.tar.bz2 scala-37b0a629b6490061d57005d909ccd23c6f3c99ea.zip |
Ported fix for #845 to trunk
Diffstat (limited to 'src/actors')
-rw-r--r-- | src/actors/scala/actors/Actor.scala | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/src/actors/scala/actors/Actor.scala b/src/actors/scala/actors/Actor.scala index e001cfb2a2..2b9916a911 100644 --- a/src/actors/scala/actors/Actor.scala +++ b/src/actors/scala/actors/Actor.scala @@ -533,11 +533,21 @@ trait Actor extends OutputChannel[Any] { val qel = mailbox.extractFirst((m: Any) => f.isDefinedAt(m)) if (null eq qel) { - waitingFor = f.isDefinedAt - TimerThread.requestTimeout(this, f, msec) - timeoutPending = true - continuation = f - isDetached = true + if (msec == 0) { + if (f.isDefinedAt(TIMEOUT)) { + sessions = List(Actor.self) + scheduleActor(f, TIMEOUT) + } + else + error("unhandled timeout") + } + else { + waitingFor = f.isDefinedAt + TimerThread.requestTimeout(this, f, msec) + timeoutPending = true + continuation = f + isDetached = true + } } else { sessions = List(qel.session) scheduleActor(f, qel.msg) |