summaryrefslogtreecommitdiff
path: root/src/actors
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2009-12-15 14:23:33 +0000
committerPaul Phillips <paulp@improving.org>2009-12-15 14:23:33 +0000
commite59e58b003569be13033d84af38acc7ab6d69139 (patch)
tree5c01cdf4ac85d9a0bce6aa089dca06bb7009de52 /src/actors
parent8a89b68903d77b44471fa216561488efbf16bed7 (diff)
downloadscala-e59e58b003569be13033d84af38acc7ab6d69139.tar.gz
scala-e59e58b003569be13033d84af38acc7ab6d69139.tar.bz2
scala-e59e58b003569be13033d84af38acc7ab6d69139.zip
Eliminating the deprecation warnings in the act...
Eliminating the deprecation warnings in the actor library.
Diffstat (limited to 'src/actors')
-rw-r--r--src/actors/scala/actors/ActorGC.scala2
-rw-r--r--src/actors/scala/actors/Future.scala20
-rw-r--r--src/actors/scala/actors/MessageQueue.scala27
-rw-r--r--src/actors/scala/actors/Reactor.scala10
-rw-r--r--src/actors/scala/actors/ReplyReactor.scala4
-rw-r--r--src/actors/scala/actors/ReplyableActor.scala8
-rw-r--r--src/actors/scala/actors/ReplyableReactor.scala19
-rw-r--r--src/actors/scala/actors/scheduler/ForkJoinScheduler.scala2
-rw-r--r--src/actors/scala/actors/scheduler/ResizableThreadPoolScheduler.scala2
-rw-r--r--src/actors/scala/actors/scheduler/SchedulerService.scala2
-rw-r--r--src/actors/scala/actors/scheduler/TerminationMonitor.scala7
-rw-r--r--src/actors/scala/actors/scheduler/TerminationService.scala2
-rw-r--r--src/actors/scala/actors/scheduler/ThreadPoolScheduler.scala2
13 files changed, 61 insertions, 46 deletions
diff --git a/src/actors/scala/actors/ActorGC.scala b/src/actors/scala/actors/ActorGC.scala
index fcadade886..af1b0ed82d 100644
--- a/src/actors/scala/actors/ActorGC.scala
+++ b/src/actors/scala/actors/ActorGC.scala
@@ -67,7 +67,7 @@ trait ActorGC extends TerminationMonitor {
}
/** Checks whether all actors have terminated. */
- override def allTerminated: Boolean = synchronized {
+ override private[actors] def allActorsTerminated: Boolean = synchronized {
activeActors <= 0
}
diff --git a/src/actors/scala/actors/Future.scala b/src/actors/scala/actors/Future.scala
index f194ac57df..d6dba36321 100644
--- a/src/actors/scala/actors/Future.scala
+++ b/src/actors/scala/actors/Future.scala
@@ -27,8 +27,14 @@ import scheduler.DefaultThreadPoolScheduler
* @author Philipp Haller
*/
abstract class Future[+T](val inputChannel: InputChannel[T]) extends Responder[T] with Function0[T] {
+ private[actors] var fvalue: Option[Any] = None
+ private[actors] def fvalueTyped = fvalue.get.asInstanceOf[T]
+
+ @deprecated("this member is going to be removed in a future release")
+ protected def value: Option[Any] = fvalue
@deprecated("this member is going to be removed in a future release")
- protected var value: Option[Any] = None
+ protected def value_=(x: Option[Any]) { fvalue = x }
+
def isSet: Boolean
}
@@ -145,19 +151,19 @@ object Futures {
private[actors] def fromInputChannel[T](inputChannel: InputChannel[T]): Future[T] =
new Future[T](inputChannel) {
def apply() =
- if (isSet) value.get.asInstanceOf[T]
+ if (isSet) fvalueTyped
else inputChannel.receive {
- case any => value = Some(any); value.get.asInstanceOf[T]
+ case any => fvalue = Some(any); fvalueTyped
}
def respond(k: T => Unit): Unit =
- if (isSet) k(value.get.asInstanceOf[T])
+ if (isSet) k(fvalueTyped)
else inputChannel.react {
- case any => value = Some(any); k(value.get.asInstanceOf[T])
+ case any => fvalue = Some(any); k(fvalueTyped)
}
- def isSet = value match {
+ def isSet = fvalue match {
case None => inputChannel.receiveWithin(0) {
case TIMEOUT => false
- case any => value = Some(any); true
+ case any => fvalue = Some(any); true
}
case Some(_) => true
}
diff --git a/src/actors/scala/actors/MessageQueue.scala b/src/actors/scala/actors/MessageQueue.scala
index 7dea528c73..fd43e36fff 100644
--- a/src/actors/scala/actors/MessageQueue.scala
+++ b/src/actors/scala/actors/MessageQueue.scala
@@ -18,7 +18,12 @@ package scala.actors
*/
@serializable @SerialVersionUID(7124278808020037465L)
@deprecated("this class is going to be removed in a future release")
-class MessageQueueElement(val msg: Any, val session: OutputChannel[Any], var next: MessageQueueElement) {
+class MessageQueueElement(msg: Any, session: OutputChannel[Any], next: MessageQueueElement) extends MQueueElement(msg, session, next) {
+ def this() = this(null, null, null)
+ def this(msg: Any, session: OutputChannel[Any]) = this(msg, session, null)
+}
+
+private[actors] class MQueueElement(val msg: Any, val session: OutputChannel[Any], var next: MQueueElement) {
def this() = this(null, null, null)
def this(msg: Any, session: OutputChannel[Any]) = this(msg, session, null)
}
@@ -33,9 +38,11 @@ class MessageQueueElement(val msg: Any, val session: OutputChannel[Any], var nex
*/
@serializable @SerialVersionUID(2168935872884095767L)
@deprecated("this class is going to be removed in a future release")
-class MessageQueue(protected val label: String) {
- protected var first: MessageQueueElement = null
- protected var last: MessageQueueElement = null // last eq null iff list is empty
+class MessageQueue(label: String) extends MQueue(label)
+
+private[actors] class MQueue(protected val label: String) {
+ protected var first: MQueueElement = null
+ protected var last: MQueueElement = null // last eq null iff list is empty
private var _size = 0
def size = _size
@@ -47,7 +54,7 @@ class MessageQueue(protected val label: String) {
def append(msg: Any, session: OutputChannel[Any]) {
changeSize(1) // size always increases by 1
- val el = new MessageQueueElement(msg, session)
+ val el = new MQueueElement(msg, session)
if (isEmpty) first = el
else last.next = el
@@ -98,13 +105,13 @@ class MessageQueue(protected val label: String) {
/** Extracts the first message that satisfies the predicate <code>p</code>
* or <code>null</code> if <code>p</code> fails for all of them.
*/
- def extractFirst(p: (Any, OutputChannel[Any]) => Boolean): MessageQueueElement =
+ def extractFirst(p: (Any, OutputChannel[Any]) => Boolean): MQueueElement =
removeInternal(0)(p) orNull
- private def removeInternal(n: Int)(p: (Any, OutputChannel[Any]) => Boolean): Option[MessageQueueElement] = {
+ private def removeInternal(n: Int)(p: (Any, OutputChannel[Any]) => Boolean): Option[MQueueElement] = {
var pos = 0
- def foundMsg(x: MessageQueueElement) = {
+ def foundMsg(x: MQueueElement) = {
changeSize(-1)
Some(x)
}
@@ -148,7 +155,7 @@ class MessageQueue(protected val label: String) {
/** Debugging trait.
*/
-private[actors] trait MessageQueueTracer extends MessageQueue
+private[actors] trait MessageQueueTracer extends MQueue
{
private val queueNumber = MessageQueueTracer.getQueueNumber
@@ -166,7 +173,7 @@ private[actors] trait MessageQueueTracer extends MessageQueue
printQueue("REMOVE %s" format res)
res
}
- override def extractFirst(p: (Any, OutputChannel[Any]) => Boolean): MessageQueueElement = {
+ override def extractFirst(p: (Any, OutputChannel[Any]) => Boolean): MQueueElement = {
val res = super.extractFirst(p)
printQueue("EXTRACT_FIRST %s" format res)
res
diff --git a/src/actors/scala/actors/Reactor.scala b/src/actors/scala/actors/Reactor.scala
index ade2076a62..0eff67c163 100644
--- a/src/actors/scala/actors/Reactor.scala
+++ b/src/actors/scala/actors/Reactor.scala
@@ -32,7 +32,7 @@ private object Reactor {
trait Reactor extends OutputChannel[Any] {
/* The actor's mailbox. */
- private[actors] val mailbox = new MessageQueue("Reactor")
+ private[actors] val mailbox = new MQueue("Reactor")
// guarded by this
private[actors] val sendBuffer = new Queue[(Any, OutputChannel[Any])]
@@ -93,7 +93,7 @@ trait Reactor extends OutputChannel[Any] {
private[actors] def startSearch(msg: Any, replyTo: OutputChannel[Any], handler: Any => Boolean) =
() => scheduler execute (makeReaction(() => {
- val startMbox = new MessageQueue("Start")
+ val startMbox = new MQueue("Start")
synchronized { startMbox.append(msg, replyTo) }
searchMailbox(startMbox, handler, true)
}))
@@ -123,7 +123,7 @@ trait Reactor extends OutputChannel[Any] {
def receiver: Actor = this.asInstanceOf[Actor]
// guarded by this
- private[actors] def drainSendBuffer(mbox: MessageQueue) {
+ private[actors] def drainSendBuffer(mbox: MQueue) {
while (!sendBuffer.isEmpty) {
val item = sendBuffer.dequeue()
mbox.append(item._1, item._2)
@@ -131,7 +131,7 @@ trait Reactor extends OutputChannel[Any] {
}
// assume continuation != null
- private[actors] def searchMailbox(startMbox: MessageQueue,
+ private[actors] def searchMailbox(startMbox: MQueue,
handlesMessage: Any => Boolean,
resumeOnSameThread: Boolean) {
var tmpMbox = startMbox
@@ -144,7 +144,7 @@ trait Reactor extends OutputChannel[Any] {
synchronized {
// in mean time new stuff might have arrived
if (!sendBuffer.isEmpty) {
- tmpMbox = new MessageQueue("Temp")
+ tmpMbox = new MQueue("Temp")
drainSendBuffer(tmpMbox)
// keep going
} else {
diff --git a/src/actors/scala/actors/ReplyReactor.scala b/src/actors/scala/actors/ReplyReactor.scala
index 662d08b661..4b31369db4 100644
--- a/src/actors/scala/actors/ReplyReactor.scala
+++ b/src/actors/scala/actors/ReplyReactor.scala
@@ -62,7 +62,7 @@ trait ReplyReactor extends Reactor with ReplyableReactor {
}
// assume continuation != null
- private[actors] override def searchMailbox(startMbox: MessageQueue,
+ private[actors] override def searchMailbox(startMbox: MQueue,
handlesMessage: Any => Boolean,
resumeOnSameThread: Boolean) {
var tmpMbox = startMbox
@@ -78,7 +78,7 @@ trait ReplyReactor extends Reactor with ReplyableReactor {
synchronized {
// in mean time new stuff might have arrived
if (!sendBuffer.isEmpty) {
- tmpMbox = new MessageQueue("Temp")
+ tmpMbox = new MQueue("Temp")
drainSendBuffer(tmpMbox)
// keep going
} else {
diff --git a/src/actors/scala/actors/ReplyableActor.scala b/src/actors/scala/actors/ReplyableActor.scala
index a6a79f7183..2122dd854b 100644
--- a/src/actors/scala/actors/ReplyableActor.scala
+++ b/src/actors/scala/actors/ReplyableActor.scala
@@ -121,13 +121,13 @@ private[actors] trait ReplyableActor extends ReplyableReactor {
case Exit(from, reason) =>
exitReason = Some(reason)
case any =>
- value = Some(any)
+ fvalue = Some(any)
}
def apply(): Any =
if (isSet) {
- if (!value.isEmpty)
- value.get
+ if (!fvalue.isEmpty)
+ fvalue.get
else if (!exitReason.isEmpty) {
val reason = exitReason.get
if (reason.isInstanceOf[Throwable])
@@ -143,7 +143,7 @@ private[actors] trait ReplyableActor extends ReplyableReactor {
else
inputChannel.react(handleReply andThen {(x: Unit) => k(apply())})
- def isSet = (value match {
+ def isSet = (fvalue match {
case None =>
val handleTimeout: PartialFunction[Any, Boolean] = {
case TIMEOUT =>
diff --git a/src/actors/scala/actors/ReplyableReactor.scala b/src/actors/scala/actors/ReplyableReactor.scala
index 72b884da2a..ecca50e26d 100644
--- a/src/actors/scala/actors/ReplyableReactor.scala
+++ b/src/actors/scala/actors/ReplyableReactor.scala
@@ -98,20 +98,19 @@ private[actors] trait ReplyableReactor extends Replyable[Any, Any] {
this.send(msg, out)
new Future[A](ftch) {
- def apply() =
- if (isSet) value.get.asInstanceOf[A]
- else {
- value = Some(res.get)
- value.get.asInstanceOf[A]
- }
+ def apply() = {
+ if (!isSet)
+ fvalue = Some(res.get)
+
+ fvalueTyped
+ }
def respond(k: A => Unit): Unit =
- if (isSet) k(value.get.asInstanceOf[A])
+ if (isSet) k(fvalueTyped)
else inputChannel.react {
- case any => value = Some(any); k(value.get.asInstanceOf[A])
+ case any => fvalue = Some(any); k(fvalueTyped)
}
def isSet =
- !value.isEmpty
+ !fvalue.isEmpty
}
}
-
}
diff --git a/src/actors/scala/actors/scheduler/ForkJoinScheduler.scala b/src/actors/scala/actors/scheduler/ForkJoinScheduler.scala
index b0198d4879..54fab4fb11 100644
--- a/src/actors/scala/actors/scheduler/ForkJoinScheduler.scala
+++ b/src/actors/scala/actors/scheduler/ForkJoinScheduler.scala
@@ -67,7 +67,7 @@ class ForkJoinScheduler(val initCoreSize: Int, val maxSize: Int, daemon: Boolean
if (terminating)
throw new QuitException
- if (allTerminated) {
+ if (allActorsTerminated) {
Debug.info(this+": all actors terminated")
terminating = true
throw new QuitException
diff --git a/src/actors/scala/actors/scheduler/ResizableThreadPoolScheduler.scala b/src/actors/scala/actors/scheduler/ResizableThreadPoolScheduler.scala
index 69fb30b52d..ff74d0bc8b 100644
--- a/src/actors/scala/actors/scheduler/ResizableThreadPoolScheduler.scala
+++ b/src/actors/scala/actors/scheduler/ResizableThreadPoolScheduler.scala
@@ -122,7 +122,7 @@ class ResizableThreadPoolScheduler(protected val terminate: Boolean,
if (coreSize - activeBlocked < numCores && coreSize < maxSize) {
coreSize = numCores + activeBlocked
executor.setCorePoolSize(coreSize)
- } else if (terminate && allTerminated) {
+ } else if (terminate && allActorsTerminated) {
// if all worker threads idle terminate
if (executor.getActiveCount() == 0) {
Debug.info(this+": initiating shutdown...")
diff --git a/src/actors/scala/actors/scheduler/SchedulerService.scala b/src/actors/scala/actors/scheduler/SchedulerService.scala
index 2198efa8c4..dca8bb5b9c 100644
--- a/src/actors/scala/actors/scheduler/SchedulerService.scala
+++ b/src/actors/scala/actors/scheduler/SchedulerService.scala
@@ -50,7 +50,7 @@ abstract class SchedulerService(daemon: Boolean) extends Thread with IScheduler
gc()
- if (allTerminated)
+ if (allActorsTerminated)
throw new QuitException
}
}
diff --git a/src/actors/scala/actors/scheduler/TerminationMonitor.scala b/src/actors/scala/actors/scheduler/TerminationMonitor.scala
index b803b509e0..5510ebb095 100644
--- a/src/actors/scala/actors/scheduler/TerminationMonitor.scala
+++ b/src/actors/scala/actors/scheduler/TerminationMonitor.scala
@@ -61,11 +61,14 @@ trait TerminationMonitor {
}
/** Checks whether all actors have terminated. */
- @deprecated("this method is going to be removed in a future release")
- def allTerminated: Boolean = synchronized {
+ private[actors] def allActorsTerminated: Boolean = synchronized {
started && activeActors <= 0
}
+ /** Deprecated non-actor-private version */
+ @deprecated("this method is going to be removed in a future release")
+ def allTerminated: Boolean = allActorsTerminated
+
/** Checks for actors that have become garbage. */
protected def gc() {}
}
diff --git a/src/actors/scala/actors/scheduler/TerminationService.scala b/src/actors/scala/actors/scheduler/TerminationService.scala
index d851caf536..b6f03f11e5 100644
--- a/src/actors/scala/actors/scheduler/TerminationService.scala
+++ b/src/actors/scala/actors/scheduler/TerminationService.scala
@@ -42,7 +42,7 @@ abstract class TerminationService(terminate: Boolean)
if (terminating)
throw new QuitException
- if (terminate && allTerminated)
+ if (terminate && allActorsTerminated)
throw new QuitException
}
}
diff --git a/src/actors/scala/actors/scheduler/ThreadPoolScheduler.scala b/src/actors/scala/actors/scheduler/ThreadPoolScheduler.scala
index 6f928c9af8..2eb18645ff 100644
--- a/src/actors/scala/actors/scheduler/ThreadPoolScheduler.scala
+++ b/src/actors/scala/actors/scheduler/ThreadPoolScheduler.scala
@@ -57,7 +57,7 @@ class ThreadPoolScheduler(protected var executor: ThreadPoolExecutor,
case _: InterruptedException =>
}
- if (terminating || (terminate && allTerminated))
+ if (terminating || (terminate && allActorsTerminated))
throw new QuitException
gc()