diff options
author | Paul Phillips <paulp@improving.org> | 2010-03-04 05:22:57 +0000 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2010-03-04 05:22:57 +0000 |
commit | 34b8e8fcbbb1b11ce81bf69b730abcb78b6699ec (patch) | |
tree | b2ae69f2731acde0ec4b921cf2e1a73295ea3250 /src/actors | |
parent | 65520ac86f5362bfa438c0b9e1a84f1f558e2618 (diff) | |
download | scala-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')
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() |