diff options
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) |