summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilipp Haller <hallerp@gmail.com>2008-05-05 15:40:58 +0000
committerPhilipp Haller <hallerp@gmail.com>2008-05-05 15:40:58 +0000
commit37b0a629b6490061d57005d909ccd23c6f3c99ea (patch)
tree2170cccf121f95cb61896e5fd1b71288871d69a0
parent06efde1f28ec6ad3f0008e3aaf08f292f0ae452f (diff)
downloadscala-37b0a629b6490061d57005d909ccd23c6f3c99ea.tar.gz
scala-37b0a629b6490061d57005d909ccd23c6f3c99ea.tar.bz2
scala-37b0a629b6490061d57005d909ccd23c6f3c99ea.zip
Ported fix for #845 to trunk
-rw-r--r--src/actors/scala/actors/Actor.scala20
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)