summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilipp Haller <hallerp@gmail.com>2010-03-17 11:07:50 +0000
committerPhilipp Haller <hallerp@gmail.com>2010-03-17 11:07:50 +0000
commit7fb02f53def7a11ea2c25c3f831b8ce2c9c9b3be (patch)
tree451dff991322ae22f3a31041ea5109f7bda81dc7
parentc2a9a308cce58d1a1fec703235cdce4e7438e0a0 (diff)
downloadscala-7fb02f53def7a11ea2c25c3f831b8ce2c9c9b3be.tar.gz
scala-7fb02f53def7a11ea2c25c3f831b8ce2c9c9b3be.tar.bz2
scala-7fb02f53def7a11ea2c25c3f831b8ce2c9c9b3be.zip
Closes #3185. Review by plocinic.
-rw-r--r--src/actors/scala/actors/Reactor.scala2
-rw-r--r--test/files/jvm/actor-link-getstate.check2
-rw-r--r--test/files/jvm/actor-link-getstate.scala42
3 files changed, 46 insertions, 0 deletions
diff --git a/src/actors/scala/actors/Reactor.scala b/src/actors/scala/actors/Reactor.scala
index c20f6dd41a..ecd7148da0 100644
--- a/src/actors/scala/actors/Reactor.scala
+++ b/src/actors/scala/actors/Reactor.scala
@@ -271,6 +271,8 @@ trait Reactor[Msg >: Null] extends OutputChannel[Msg] with Combinators {
private[actors] def terminated() {
synchronized {
_state = Actor.State.Terminated
+ // reset waitingFor, otherwise getState returns Suspended
+ waitingFor = Reactor.waitingForNone
}
scheduler.terminated(this)
}
diff --git a/test/files/jvm/actor-link-getstate.check b/test/files/jvm/actor-link-getstate.check
new file mode 100644
index 0000000000..9755447320
--- /dev/null
+++ b/test/files/jvm/actor-link-getstate.check
@@ -0,0 +1,2 @@
+Done
+Terminated
diff --git a/test/files/jvm/actor-link-getstate.scala b/test/files/jvm/actor-link-getstate.scala
new file mode 100644
index 0000000000..955ea45499
--- /dev/null
+++ b/test/files/jvm/actor-link-getstate.scala
@@ -0,0 +1,42 @@
+import scala.actors.{Actor, Exit}
+import scala.actors.Actor._
+
+object Slave extends Actor {
+ def act() {
+ loop {
+ react {
+ case 'doWork =>
+ println("Done")
+ reply('done)
+ }
+ }
+ }
+}
+
+object Master extends Actor {
+ def act() {
+ link(Slave)
+ Slave ! 'doWork
+ react {
+ case 'done =>
+ throw new Exception("Master crashed")
+ }
+ }
+}
+
+object Test {
+
+ def main(args: Array[String]) {
+ actor {
+ self.trapExit = true
+ link(Slave)
+ Slave.start()
+ Master.start()
+ react {
+ case Exit(from, reason) if (from == Slave) =>
+ println(Slave.getState)
+ }
+ }
+ }
+
+}