From 7fb02f53def7a11ea2c25c3f831b8ce2c9c9b3be Mon Sep 17 00:00:00 2001 From: Philipp Haller Date: Wed, 17 Mar 2010 11:07:50 +0000 Subject: Closes #3185. Review by plocinic. --- src/actors/scala/actors/Reactor.scala | 2 ++ test/files/jvm/actor-link-getstate.check | 2 ++ test/files/jvm/actor-link-getstate.scala | 42 ++++++++++++++++++++++++++++++++ 3 files changed, 46 insertions(+) create mode 100644 test/files/jvm/actor-link-getstate.check create mode 100644 test/files/jvm/actor-link-getstate.scala 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) + } + } + } + +} -- cgit v1.2.3