summaryrefslogtreecommitdiff
path: root/src/actors
diff options
context:
space:
mode:
Diffstat (limited to 'src/actors')
-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)