diff options
Diffstat (limited to 'test/files')
-rw-r--r-- | test/files/jvm/t3365.check | 5 | ||||
-rw-r--r-- | test/files/jvm/t3365.scala | 65 |
2 files changed, 70 insertions, 0 deletions
diff --git a/test/files/jvm/t3365.check b/test/files/jvm/t3365.check new file mode 100644 index 0000000000..0944b17279 --- /dev/null +++ b/test/files/jvm/t3365.check @@ -0,0 +1,5 @@ +'hello +'hello +'hello +'hello +'hello diff --git a/test/files/jvm/t3365.scala b/test/files/jvm/t3365.scala new file mode 100644 index 0000000000..b94e804e63 --- /dev/null +++ b/test/files/jvm/t3365.scala @@ -0,0 +1,65 @@ +import scala.actors.{ReplyReactor, Channel, Actor, Future} + +case class ChannelMsg(chan: Channel[Any]) + +class MyActor extends Actor { + def act() { + try { + val chan = new Channel[Any](this) + loop { + react { + case other: ReplyReactor => + other ! ChannelMsg(chan) + loop { + chan.react { + case 'hello => + reply('hello) + case 'stop => + exit() + } + } + } + } + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } + } +} + +object Test { + def main(args: Array[String]) { + val a = new MyActor + a.start() + + val b = new Actor { + def act() { + try { + react { + case ChannelMsg(c) => + var i = 0 + loop { + i += 1 + val ft: Future[Any] = c !! 'hello + ft.inputChannel.react { + case msg => + if (i % 10000 == 0) + println(msg) + if (i >= 50000) { + c ! 'stop + exit() + } + } + } + } + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } + } + } + b.start() + + a ! b + } +} |