summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilipp Haller <hallerp@gmail.com>2011-03-15 16:42:00 +0000
committerPhilipp Haller <hallerp@gmail.com>2011-03-15 16:42:00 +0000
commit9c5dfa18ed809e0cca090ecb7a1a8f0e3301c053 (patch)
tree9f1e522bd729e2714f8f3e1b74b947748db697c2
parente23435247ba5b1f0073505d90cfd031090c5c565 (diff)
downloadscala-9c5dfa18ed809e0cca090ecb7a1a8f0e3301c053.tar.gz
scala-9c5dfa18ed809e0cca090ecb7a1a8f0e3301c053.tar.bz2
scala-9c5dfa18ed809e0cca090ecb7a1a8f0e3301c053.zip
Closes #3838. Review by prokopec.
-rw-r--r--src/actors/scala/actors/Actor.scala27
-rw-r--r--test/files/jvm/t3838.check1
-rw-r--r--test/files/jvm/t3838.scala15
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)
+ }
+ }
+ }
+}