From 522a16311410304fcee50527056aee86cfeda264 Mon Sep 17 00:00:00 2001 From: Viktor Klang Date: Mon, 11 Jul 2011 18:54:15 +0200 Subject: [PATCH 1/2] Adding support for daemonizing MonitorableThreads --- .../src/main/scala/akka/dispatch/ThreadPoolBuilder.scala | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/akka-actor/src/main/scala/akka/dispatch/ThreadPoolBuilder.scala b/akka-actor/src/main/scala/akka/dispatch/ThreadPoolBuilder.scala index d6d33255a5..b52e17d3a2 100644 --- a/akka-actor/src/main/scala/akka/dispatch/ThreadPoolBuilder.scala +++ b/akka-actor/src/main/scala/akka/dispatch/ThreadPoolBuilder.scala @@ -151,10 +151,14 @@ case class ThreadPoolConfigDispatcherBuilder(dispatcherFactory: (ThreadPoolConfi /** * @author Jonas Bonér */ -class MonitorableThreadFactory(val name: String) extends ThreadFactory { +class MonitorableThreadFactory(val name: String, val daemonic: Boolean = false) extends ThreadFactory { protected val counter = new AtomicLong - def newThread(runnable: Runnable) = new MonitorableThread(runnable, name) + def newThread(runnable: Runnable) = { + val t = new MonitorableThread(runnable, name) + t.setDaemon(daemonic) + t + } } /** From c577664d6d020e60e40f83014131906e8c09aa60 Mon Sep 17 00:00:00 2001 From: Viktor Klang Date: Mon, 11 Jul 2011 18:54:50 +0200 Subject: [PATCH 2/2] Fixing ticket #984 by renaming Exit to Death --- .../akka/actor/supervisor/SupervisorHierarchySpec.scala | 6 +++--- akka-actor/src/main/scala/akka/actor/Actor.scala | 4 ++-- akka-actor/src/main/scala/akka/actor/ActorRef.scala | 4 ++-- .../main/scala/akka/remote/netty/NettyRemoteSupport.scala | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/akka-actor-tests/src/test/scala/akka/actor/supervisor/SupervisorHierarchySpec.scala b/akka-actor-tests/src/test/scala/akka/actor/supervisor/SupervisorHierarchySpec.scala index c0cf6a554c..02955798c5 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/supervisor/SupervisorHierarchySpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/supervisor/SupervisorHierarchySpec.scala @@ -49,7 +49,7 @@ class SupervisorHierarchySpec extends JUnitSuite { manager.startLink(workerTwo) manager.startLink(workerThree) - workerOne ! Exit(workerOne, new FireWorkerException("Fire the worker!")) + workerOne ! Death(workerOne, new FireWorkerException("Fire the worker!")) // manager + all workers should be restarted by only killing a worker // manager doesn't trap exits, so boss will restart manager @@ -70,8 +70,8 @@ class SupervisorHierarchySpec extends JUnitSuite { }).start() boss.startLink(crasher) - crasher ! Exit(crasher, new FireWorkerException("Fire the worker!")) - crasher ! Exit(crasher, new FireWorkerException("Fire the worker!")) + crasher ! Death(crasher, new FireWorkerException("Fire the worker!")) + crasher ! Death(crasher, new FireWorkerException("Fire the worker!")) assert(countDown.await(2, TimeUnit.SECONDS)) } diff --git a/akka-actor/src/main/scala/akka/actor/Actor.scala b/akka-actor/src/main/scala/akka/actor/Actor.scala index 4a9b07a222..8bad9204bf 100644 --- a/akka-actor/src/main/scala/akka/actor/Actor.scala +++ b/akka-actor/src/main/scala/akka/actor/Actor.scala @@ -58,7 +58,7 @@ case object RevertHotSwap extends AutoReceivedMessage with LifeCycleMessage case class Restart(reason: Throwable) extends AutoReceivedMessage with LifeCycleMessage -case class Exit(dead: ActorRef, killer: Throwable) extends AutoReceivedMessage with LifeCycleMessage +case class Death(dead: ActorRef, killer: Throwable) extends AutoReceivedMessage with LifeCycleMessage case class Link(child: ActorRef) extends AutoReceivedMessage with LifeCycleMessage @@ -727,7 +727,7 @@ trait Actor { msg match { case HotSwap(code, discardOld) ⇒ become(code(self), discardOld) case RevertHotSwap ⇒ unbecome() - case Exit(dead, reason) ⇒ self.handleTrapExit(dead, reason) + case Death(dead, reason) ⇒ self.handleTrapExit(dead, reason) case Link(child) ⇒ self.link(child) case Unlink(child) ⇒ self.unlink(child) case UnlinkAndStop(child) ⇒ self.unlink(child); child.stop() diff --git a/akka-actor/src/main/scala/akka/actor/ActorRef.scala b/akka-actor/src/main/scala/akka/actor/ActorRef.scala index 42838bd452..0874f93c4c 100644 --- a/akka-actor/src/main/scala/akka/actor/ActorRef.scala +++ b/akka-actor/src/main/scala/akka/actor/ActorRef.scala @@ -709,7 +709,7 @@ class LocalActorRef private[akka] (private[this] val actorFactory: () ⇒ Actor, dead.restart(reason, maxRetries, within) case _ ⇒ - if (_supervisor.isDefined) notifySupervisorWithMessage(Exit(this, reason)) + if (_supervisor.isDefined) notifySupervisorWithMessage(Death(this, reason)) else dead.stop() } } @@ -857,7 +857,7 @@ class LocalActorRef private[akka] (private[this] val actorFactory: () ⇒ Actor, channel.sendException(reason) - if (supervisor.isDefined) notifySupervisorWithMessage(Exit(this, reason)) + if (supervisor.isDefined) notifySupervisorWithMessage(Death(this, reason)) else { lifeCycle match { case Temporary ⇒ shutDownTemporaryActor(this) diff --git a/akka-cluster/src/main/scala/akka/remote/netty/NettyRemoteSupport.scala b/akka-cluster/src/main/scala/akka/remote/netty/NettyRemoteSupport.scala index 3dc59daec0..4a2d84a80a 100644 --- a/akka-cluster/src/main/scala/akka/remote/netty/NettyRemoteSupport.scala +++ b/akka-cluster/src/main/scala/akka/remote/netty/NettyRemoteSupport.scala @@ -20,7 +20,7 @@ import akka.actor.{ RemoteActorSystemMessage, uuidFrom, Uuid, - Exit, + Death, LifeCycleMessage } import akka.actor.Actor._