summaryrefslogtreecommitdiff
path: root/src/actors
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2010-03-04 05:22:57 +0000
committerPaul Phillips <paulp@improving.org>2010-03-04 05:22:57 +0000
commit34b8e8fcbbb1b11ce81bf69b730abcb78b6699ec (patch)
treeb2ae69f2731acde0ec4b921cf2e1a73295ea3250 /src/actors
parent65520ac86f5362bfa438c0b9e1a84f1f558e2618 (diff)
downloadscala-34b8e8fcbbb1b11ce81bf69b730abcb78b6699ec.tar.gz
scala-34b8e8fcbbb1b11ce81bf69b730abcb78b6699ec.tar.bz2
scala-34b8e8fcbbb1b11ce81bf69b730abcb78b6699ec.zip
A few yards short of the goal posts attempt at ...
A few yards short of the goal posts attempt at making our usage of Throwable subclasses more consistent. This patch eliminates a lot of ad hoc Exception/Error/etc. creation and various arbitrary choices are rendered slightly less arbitrary. From now on let's try not to use the word "Exception" or "Error" in the names of Throwable subclasses unless they actually derive (and make sense to derive) from Exception or Error. Review by community.
Diffstat (limited to 'src/actors')
-rw-r--r--src/actors/scala/actors/Actor.scala12
-rw-r--r--src/actors/scala/actors/Combinators.scala2
-rw-r--r--src/actors/scala/actors/Reaction.scala4
-rw-r--r--src/actors/scala/actors/Reactor.scala12
-rw-r--r--src/actors/scala/actors/ReactorTask.scala4
-rw-r--r--src/actors/scala/actors/scheduler/ForkJoinScheduler.scala8
-rw-r--r--src/actors/scala/actors/scheduler/ResizableThreadPoolScheduler.scala8
-rw-r--r--src/actors/scala/actors/scheduler/SchedulerService.scala12
-rw-r--r--src/actors/scala/actors/scheduler/TerminationService.scala6
-rw-r--r--src/actors/scala/actors/scheduler/ThreadPoolScheduler.scala4
10 files changed, 36 insertions, 36 deletions
diff --git a/src/actors/scala/actors/Actor.scala b/src/actors/scala/actors/Actor.scala
index aeda4a4670..6c8647daaa 100644
--- a/src/actors/scala/actors/Actor.scala
+++ b/src/actors/scala/actors/Actor.scala
@@ -10,7 +10,7 @@
package scala.actors
-import scala.util.control.ControlException
+import scala.util.control.ControlThrowable
import java.util.{Timer, TimerTask}
import java.util.concurrent.{ExecutionException, Callable}
@@ -29,7 +29,7 @@ object Actor extends Combinators {
// timer thread runs as daemon
private[actors] val timer = new Timer(true)
- private[actors] val suspendException = new SuspendActorException
+ private[actors] val suspendException = new SuspendActorControl
/**
* Returns the currently executing actor. Should be used instead
@@ -623,7 +623,7 @@ trait Actor extends AbstractActor with ReplyReactor with ReplyableActor {
}
// guarded by lock of this
- // never throws SuspendActorException
+ // never throws SuspendActorControl
private[actors] override def scheduleActor(f: PartialFunction[Any, Any], msg: Any) =
if (f eq null) {
// do nothing (timeout is handled instead)
@@ -800,12 +800,12 @@ trait Actor extends AbstractActor with ReplyReactor with ReplyableActor {
resumeActor()
else if (waitingFor ne Reactor.waitingForNone) {
scheduleActor(waitingFor, null)
- /* Here we should not throw a SuspendActorException,
+ /* Here we should not throw a SuspendActorControl,
since the current method is called from an actor that
is in the process of exiting.
Therefore, the contract for scheduleActor is that
- it never throws a SuspendActorException.
+ it never throws a SuspendActorControl.
*/
}
}
@@ -851,4 +851,4 @@ case class Exit(from: AbstractActor, reason: AnyRef)
* @version 0.9.8
* @author Philipp Haller
*/
-private[actors] class SuspendActorException extends Throwable with ControlException
+private[actors] class SuspendActorControl extends ControlThrowable
diff --git a/src/actors/scala/actors/Combinators.scala b/src/actors/scala/actors/Combinators.scala
index 073247827c..3c0be7ed15 100644
--- a/src/actors/scala/actors/Combinators.scala
+++ b/src/actors/scala/actors/Combinators.scala
@@ -34,6 +34,6 @@ private[actors] trait Combinators {
if (cond) { body andThen loopWhile(cond)(body) }
else continue
- def continue: Unit = throw new KillActorException
+ def continue: Unit = throw new KillActorControl
}
diff --git a/src/actors/scala/actors/Reaction.scala b/src/actors/scala/actors/Reaction.scala
index a8364bc8fb..7ff9204363 100644
--- a/src/actors/scala/actors/Reaction.scala
+++ b/src/actors/scala/actors/Reaction.scala
@@ -11,10 +11,10 @@
package scala.actors
-import scala.util.control.ControlException
+import scala.util.control.ControlThrowable
import java.lang.{InterruptedException, Runnable}
-private[actors] class KillActorException extends Throwable with ControlException
+private[actors] class KillActorControl extends ControlThrowable
/** <p>
* The abstract class <code>Reaction</code> associates
diff --git a/src/actors/scala/actors/Reactor.scala b/src/actors/scala/actors/Reactor.scala
index a6007a6cd8..a71368e6b2 100644
--- a/src/actors/scala/actors/Reactor.scala
+++ b/src/actors/scala/actors/Reactor.scala
@@ -119,11 +119,11 @@ trait Reactor extends OutputChannel[Any] with Combinators {
handler(item._1)
else {
scheduleActor(handler, item._1)
- /* Here, we throw a SuspendActorException to avoid
+ /* Here, we throw a SuspendActorControl to avoid
terminating this actor when the current ReactorTask
is finished.
- The SuspendActorException skips the termination code
+ The SuspendActorControl skips the termination code
in ReactorTask.
*/
throw Actor.suspendException
@@ -163,11 +163,11 @@ trait Reactor extends OutputChannel[Any] with Combinators {
// keep going
} else {
waitingFor = handler
- /* Here, we throw a SuspendActorException to avoid
+ /* Here, we throw a SuspendActorControl to avoid
terminating this actor when the current ReactorTask
is finished.
- The SuspendActorException skips the termination code
+ The SuspendActorControl skips the termination code
in ReactorTask.
*/
throw Actor.suspendException
@@ -191,7 +191,7 @@ trait Reactor extends OutputChannel[Any] with Combinators {
*
* assume handler != null
*
- * never throws SuspendActorException
+ * never throws SuspendActorControl
*/
private[actors] def scheduleActor(handler: PartialFunction[Any, Any], msg: Any) = {
val fun = () => handler(msg): Unit
@@ -228,7 +228,7 @@ trait Reactor extends OutputChannel[Any] with Combinators {
throw Actor.suspendException
}
first
- throw new KillActorException
+ throw new KillActorControl
}
protected[this] def exit(): Nothing = {
diff --git a/src/actors/scala/actors/ReactorTask.scala b/src/actors/scala/actors/ReactorTask.scala
index 3e64eab7a2..87ec7834fa 100644
--- a/src/actors/scala/actors/ReactorTask.scala
+++ b/src/actors/scala/actors/ReactorTask.scala
@@ -35,12 +35,12 @@ private[actors] class ReactorTask[T >: Null <: Reactor](var reactor: T, var fun:
reactor.exceptionHandler(e)
}
} catch {
- case _: KillActorException =>
+ case _: KillActorControl =>
}
reactor.kill()
}
catch {
- case _: SuspendActorException =>
+ case _: SuspendActorControl =>
// do nothing (continuation is already saved)
case e: Exception =>
diff --git a/src/actors/scala/actors/scheduler/ForkJoinScheduler.scala b/src/actors/scala/actors/scheduler/ForkJoinScheduler.scala
index e2537511ac..ab4fca04ca 100644
--- a/src/actors/scala/actors/scheduler/ForkJoinScheduler.scala
+++ b/src/actors/scala/actors/scheduler/ForkJoinScheduler.scala
@@ -67,12 +67,12 @@ class ForkJoinScheduler(val initCoreSize: Int, val maxSize: Int, daemon: Boolean
}
if (terminating)
- throw new QuitException
+ throw new QuitControl
if (allActorsTerminated) {
Debug.info(this+": all actors terminated")
terminating = true
- throw new QuitException
+ throw new QuitControl
}
if (!snapshoting) {
@@ -83,12 +83,12 @@ class ForkJoinScheduler(val initCoreSize: Int, val maxSize: Int, daemon: Boolean
Debug.info(this+": drained "+num+" tasks")
drainedTasks = list
terminating = true
- throw new QuitException
+ throw new QuitControl
}
}
}
} catch {
- case _: QuitException =>
+ case _: QuitControl =>
Debug.info(this+": initiating shutdown...")
while (!pool.isQuiescent()) {
try {
diff --git a/src/actors/scala/actors/scheduler/ResizableThreadPoolScheduler.scala b/src/actors/scala/actors/scheduler/ResizableThreadPoolScheduler.scala
index ff74d0bc8b..3687138e0e 100644
--- a/src/actors/scala/actors/scheduler/ResizableThreadPoolScheduler.scala
+++ b/src/actors/scala/actors/scheduler/ResizableThreadPoolScheduler.scala
@@ -112,7 +112,7 @@ class ResizableThreadPoolScheduler(protected val terminate: Boolean,
}
if (terminating)
- throw new QuitException
+ throw new QuitControl
if (!suspending) {
gc()
@@ -129,19 +129,19 @@ class ResizableThreadPoolScheduler(protected val terminate: Boolean,
Debug.info(this+": corePoolSize = "+coreSize+", maxPoolSize = "+maxSize)
terminating = true
- throw new QuitException
+ throw new QuitControl
}
}
} else {
drainedTasks = executor.shutdownNow()
Debug.info(this+": drained "+drainedTasks.size()+" tasks")
terminating = true
- throw new QuitException
+ throw new QuitControl
}
} // sync
}
} catch {
- case _: QuitException =>
+ case _: QuitControl =>
executor.shutdown()
// allow thread to exit
}
diff --git a/src/actors/scala/actors/scheduler/SchedulerService.scala b/src/actors/scala/actors/scheduler/SchedulerService.scala
index dca8bb5b9c..1f886dbae9 100644
--- a/src/actors/scala/actors/scheduler/SchedulerService.scala
+++ b/src/actors/scala/actors/scheduler/SchedulerService.scala
@@ -11,7 +11,7 @@
package scala.actors
package scheduler
-import scala.util.control.ControlException
+import scala.util.control.ControlThrowable
import java.lang.{Runnable, Thread, InterruptedException}
/**
@@ -46,16 +46,16 @@ abstract class SchedulerService(daemon: Boolean) extends Thread with IScheduler
case _: InterruptedException =>
}
if (terminating)
- throw new QuitException
+ throw new QuitControl
gc()
if (allActorsTerminated)
- throw new QuitException
+ throw new QuitControl
}
}
} catch {
- case _: QuitException =>
+ case _: QuitControl =>
Debug.info(this+": initiating shutdown...")
// invoke shutdown hook
onShutdown()
@@ -71,10 +71,10 @@ abstract class SchedulerService(daemon: Boolean) extends Thread with IScheduler
}
/**
- * The <code>QuitException</code> class is used to manage control flow
+ * The <code>QuitControl</code> class is used to manage control flow
* of certain schedulers and worker threads.
*
* @version 0.9.8
* @author Philipp Haller
*/
-private[actors] class QuitException extends Throwable with ControlException
+private[actors] class QuitControl extends ControlThrowable
diff --git a/src/actors/scala/actors/scheduler/TerminationService.scala b/src/actors/scala/actors/scheduler/TerminationService.scala
index b6f03f11e5..da71b6ac2b 100644
--- a/src/actors/scala/actors/scheduler/TerminationService.scala
+++ b/src/actors/scala/actors/scheduler/TerminationService.scala
@@ -40,14 +40,14 @@ abstract class TerminationService(terminate: Boolean)
case _: InterruptedException =>
}
if (terminating)
- throw new QuitException
+ throw new QuitControl
if (terminate && allActorsTerminated)
- throw new QuitException
+ throw new QuitControl
}
}
} catch {
- case _: QuitException =>
+ case _: QuitControl =>
Debug.info(this+": initiating shutdown...")
// invoke shutdown hook
onShutdown()
diff --git a/src/actors/scala/actors/scheduler/ThreadPoolScheduler.scala b/src/actors/scala/actors/scheduler/ThreadPoolScheduler.scala
index 2eb18645ff..2061207ee1 100644
--- a/src/actors/scala/actors/scheduler/ThreadPoolScheduler.scala
+++ b/src/actors/scala/actors/scheduler/ThreadPoolScheduler.scala
@@ -58,13 +58,13 @@ class ThreadPoolScheduler(protected var executor: ThreadPoolExecutor,
}
if (terminating || (terminate && allActorsTerminated))
- throw new QuitException
+ throw new QuitControl
gc()
}
}
} catch {
- case _: QuitException =>
+ case _: QuitControl =>
Debug.info(this+": initiating shutdown...")
// invoke shutdown hook
onShutdown()