summaryrefslogtreecommitdiff
path: root/src/actors/scala/actors/ActorTask.scala
blob: bceea06072bf5c7879769714a64448a92624d633 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/*                     __                                               *\
**     ________ ___   / /  ___     Scala API                            **
**    / __/ __// _ | / /  / _ |    (c) 2005-2010, LAMP/EPFL             **
**  __\ \/ /__/ __ |/ /__/ __ |                                         **
** /____/\___/_/ |_/____/_/ | |                                         **
**                          |/                                          **
\*                                                                      */

// $Id$


package scala.actors

/** <p>
 *    The class <code>ActorTask</code>.
 *  </p>
 *
 *  @author Philipp Haller
 */
private[actors] class ActorTask(actor: Actor,
                                fun: () => Unit,
                                handler: PartialFunction[Any, Any],
                                msg: Any)
  extends ReplyReactorTask(actor, fun, handler, msg) {

  protected override def beginExecution() {
    super.beginExecution()
    if (actor.shouldExit)
      actor.exit()
  }

  protected override def terminateExecution(e: Exception) {
    actor.synchronized {
      if (!actor.links.isEmpty)
        actor.exitLinked(e)
    }
  }

}