summaryrefslogtreecommitdiff
path: root/src/actors
diff options
context:
space:
mode:
authorPhilipp Haller <hallerp@gmail.com>2009-01-30 18:12:14 +0000
committerPhilipp Haller <hallerp@gmail.com>2009-01-30 18:12:14 +0000
commit68389103114d3a87ca82d87685903af1d3dbe9ac (patch)
tree3a271b2c697e800a8900a159649fb28a8260f605 /src/actors
parentdcb611298e0dd4d98d49bbe5100595d403d68397 (diff)
downloadscala-68389103114d3a87ca82d87685903af1d3dbe9ac.tar.gz
scala-68389103114d3a87ca82d87685903af1d3dbe9ac.tar.bz2
scala-68389103114d3a87ca82d87685903af1d3dbe9ac.zip
Fixed #1451.
Diffstat (limited to 'src/actors')
-rw-r--r--src/actors/scala/actors/FJTaskScheduler2.scala8
-rw-r--r--src/actors/scala/actors/Future.scala12
2 files changed, 14 insertions, 6 deletions
diff --git a/src/actors/scala/actors/FJTaskScheduler2.scala b/src/actors/scala/actors/FJTaskScheduler2.scala
index 2880a1d9c4..21915eb1a3 100644
--- a/src/actors/scala/actors/FJTaskScheduler2.scala
+++ b/src/actors/scala/actors/FJTaskScheduler2.scala
@@ -24,9 +24,11 @@ import scala.collection.mutable.{ArrayBuffer, Buffer, HashMap, Queue, Stack, Has
* @version 0.9.18
* @author Philipp Haller
*/
-class FJTaskScheduler2 extends Thread with IScheduler {
- // as long as this thread runs, JVM should not exit
- setDaemon(false)
+class FJTaskScheduler2(daemon: Boolean) extends Thread with IScheduler {
+ setDaemon(daemon)
+
+ def this() =
+ this(false)
var printStats = false
diff --git a/src/actors/scala/actors/Future.scala b/src/actors/scala/actors/Future.scala
index 7f6d3f3300..e7ba7573e2 100644
--- a/src/actors/scala/actors/Future.scala
+++ b/src/actors/scala/actors/Future.scala
@@ -38,13 +38,19 @@ abstract class Future[+T](val ch: InputChannel[Any]) extends Responder[T] with F
*/
object Futures {
+ private val sched = new FJTaskScheduler2(true)
+
def future[T](body: => T): Future[T] = {
case object Eval
- val a = Actor.actor {
- Actor.react {
- case Eval => Actor.reply(body)
+ val a = new Actor {
+ override def scheduler: IScheduler = sched
+ def act() {
+ Actor.react {
+ case Eval => Actor.reply(body)
+ }
}
}
+ a.start()
a !! (Eval, { case any => any.asInstanceOf[T] })
}