diff options
author | Philipp Haller <hallerp@gmail.com> | 2011-03-15 16:42:00 +0000 |
---|---|---|
committer | Philipp Haller <hallerp@gmail.com> | 2011-03-15 16:42:00 +0000 |
commit | 9c5dfa18ed809e0cca090ecb7a1a8f0e3301c053 (patch) | |
tree | 9f1e522bd729e2714f8f3e1b74b947748db697c2 | |
parent | e23435247ba5b1f0073505d90cfd031090c5c565 (diff) | |
download | scala-9c5dfa18ed809e0cca090ecb7a1a8f0e3301c053.tar.gz scala-9c5dfa18ed809e0cca090ecb7a1a8f0e3301c053.tar.bz2 scala-9c5dfa18ed809e0cca090ecb7a1a8f0e3301c053.zip |
Closes #3838. Review by prokopec.
-rw-r--r-- | src/actors/scala/actors/Actor.scala | 27 | ||||
-rw-r--r-- | test/files/jvm/t3838.check | 1 | ||||
-rw-r--r-- | test/files/jvm/t3838.scala | 15 |
3 files changed, 31 insertions, 12 deletions
diff --git a/src/actors/scala/actors/Actor.scala b/src/actors/scala/actors/Actor.scala index 98f5d2287f..059ab3abf7 100644 --- a/src/actors/scala/actors/Actor.scala +++ b/src/actors/scala/actors/Actor.scala @@ -589,18 +589,21 @@ trait Actor extends AbstractActor with ReplyReactor with ActorCanReply with Inpu done = true receiveTimeout } else { - waitingFor = f - received = None - isSuspended = true - val thisActor = this - onTimeout = Some(new TimerTask { - def run() { thisActor.send(TIMEOUT, thisActor) } - }) - Actor.timer.schedule(onTimeout.get, msec) - scheduler.managedBlock(blocker) - drainSendBuffer(mailbox) - // keep going - () => {} + if (onTimeout.isEmpty) { + waitingFor = f + received = None + isSuspended = true + val thisActor = this + onTimeout = Some(new TimerTask { + def run() { thisActor.send(TIMEOUT, thisActor) } + }) + Actor.timer.schedule(onTimeout.get, msec) + scheduler.managedBlock(blocker) + drainSendBuffer(mailbox) + // keep going + () => {} + } else + sys.error("unhandled timeout") } } todo() diff --git a/test/files/jvm/t3838.check b/test/files/jvm/t3838.check new file mode 100644 index 0000000000..154227a350 --- /dev/null +++ b/test/files/jvm/t3838.check @@ -0,0 +1 @@ +caught java.lang.RuntimeException: unhandled timeout diff --git a/test/files/jvm/t3838.scala b/test/files/jvm/t3838.scala new file mode 100644 index 0000000000..ba8f15fc31 --- /dev/null +++ b/test/files/jvm/t3838.scala @@ -0,0 +1,15 @@ +import scala.actors.Actor._ + +object Test { + def main(args: Array[String]) { + actor { + try { + receiveWithin(1) { + case str: String => println(str) + } + } catch { + case e: Exception => println("caught "+e) + } + } + } +} |