Shutdown order problem with ActorRef.cancelReceiveTimeout and ActorRegistry.shutdownAll
Just got this when running ActiveObjectLifecycleSpec in akka-core (hard to reproduce)
se.scalablesolutions.akka.actor.ActorInitializationException: Actor has not been started, you need to invoke 'actor.start' before using it
at se.scalablesolutions.akka.actor.ActorRef$class.$bang(ActorRef.scala:263)
at se.scalablesolutions.akka.actor.LocalActorRef.$bang(ActorRef.scala:581)
at se.scalablesolutions.akka.actor.Scheduler$.unschedule(Scheduler.scala:63)
at se.scalablesolutions.akka.actor.ActorRef$$anonfun$cancelReceiveTimeout$1.apply(ActorRef.scala:560)
at se.scalablesolutions.akka.actor.ActorRef$$anonfun$cancelReceiveTimeout$1.apply(ActorRef.scala:559)
at scala.Option.foreach(Option.scala:121)
at se.scalablesolutions.akka.actor.ActorRef$class.cancelReceiveTimeout(ActorRef.scala:558)
at se.scalablesolutions.akka.actor.LocalActorRef.cancelReceiveTimeout(ActorRef.scala:581)
at se.scalablesolutions.akka.actor.LocalActorRef$$anonfun$stop$1.apply$mcV$sp(ActorRef.scala:759)
at se.scalablesolutions.akka.actor.LocalActorRef$$anonfun$stop$1.apply(ActorRef.scala:758)
at se.scalablesolutions.akka.actor.LocalActorRef$$anonfun$stop$1.apply(ActorRef.scala:758)
at se.scalablesolutions.akka.util.ReentrantGuard.withGuard(LockUtil.scala:18)
at se.scalablesolutions.akka.actor.LocalActorRef.stop(ActorRef.scala:757)
at se.scalablesolutions.akka.actor.ActorRegistry$$anonfun$shutdownAll$1.apply(ActorRegistry.scala:161)
at se.scalablesolutions.akka.actor.ActorRegistry$$anonfun$shutdownAll$1.apply(ActorRegistry.scala:161)
at se.scalablesolutions.akka.actor.ActorRegistry$.foreach(ActorRegistry.scala:48)
at se.scalablesolutions.akka.actor.ActorRegistry$.shutdownAll(ActorRegistry.scala:161)
at se.scalablesolutions.akka.actor.ActiveObjectLifecycleSpec$$anonfun$1$$anonfun$apply$mcV$sp$6.apply$mcV$sp(ActiveObjectLifecycleSpec.scala:134)
at se.scalablesolutions.akka.actor.ActiveObjectLifecycleSpec$$anonfun$1$$anonfun$apply$mcV$sp$6.apply(ActiveObjectLifecycleSpec.scala:130)
at se.scalablesolutions.akka.actor.ActiveObjectLifecycleSpec$$anonfun$1$$anonfun$apply$mcV$sp$6.apply(ActiveObjectLifecycleSpec.scala:130)
...
at sbt.Distributor$Run$Worker.run(ParallelRunner.scala:131)
se.scalablesolutions.akka.actor.ActorInitializationException: Actor has not been started, you need to invoke 'actor.start' before using it
at se.scalablesolutions.akka.actor.ActorRef$class.$bang(ActorRef.scala:263)
at se.scalablesolutions.akka.actor.LocalActorRef.$bang(ActorRef.scala:581)
at se.scalablesolutions.akka.actor.Scheduler$.unschedule(Scheduler.scala:63)
at se.scalablesolutions.akka.actor.ActorRef$$anonfun$cancelReceiveTimeout$1.apply(ActorRef.scala:560)
at se.scalablesolutions.akka.actor.ActorRef$$anonfun$cancelReceiveTimeout$1.apply(ActorRef.scala:559)
at scala.Option.foreach(Option.scala:121)
at se.scalablesolutions.akka.actor.ActorRef$class.cancelReceiveTimeout(ActorRef.scala:558)
at se.scalablesolutions.akka.actor.LocalActorRef.cancelReceiveTimeout(ActorRef.scala:581)
at se.scalablesolutions.akka.actor.LocalActorRef$$anonfun$stop$1.apply$mcV$sp(ActorRef.scala:759)
at se.scalablesolutions.akka.actor.LocalActorRef$$anonfun$stop$1.apply(ActorRef.scala:758)
at se.scalablesolutions.akka.actor.LocalActorRef$$anonfun$stop$1.apply(ActorRef.scala:758)
at se.scalablesolutions.akka.util.ReentrantGuard.withGuard(LockUtil.scala:18)
at se.scalablesolutions.akka.actor.LocalActorRef.stop(ActorRef.scala:757)
at se.scalablesolutions.akka.actor.ActorRegistry$$anonfun$shutdownAll$1.apply(ActorRegistry.scala:161)
at se.scalablesolutions.akka.actor.ActorRegistry$$anonfun$shutdownAll$1.apply(ActorRegistry.scala:161)
at se.scalablesolutions.akka.actor.ActorRegistry$.foreach(ActorRegistry.scala:48)
at se.scalablesolutions.akka.actor.ActorRegistry$.shutdownAll(ActorRegistry.scala:161)
at se.scalablesolutions.akka.actor.ActiveObjectLifecycleSpec$$anonfun$1$$anonfun$apply$mcV$sp$6.apply$mcV$sp(ActiveObjectLifecycleSpec.scala:134)
at se.scalablesolutions.akka.actor.ActiveObjectLifecycleSpec$$anonfun$1$$anonfun$apply$mcV$sp$6.apply(ActiveObjectLifecycleSpec.scala:130)
at se.scalablesolutions.akka.actor.ActiveObjectLifecycleSpec$$anonfun$1$$anonfun$apply$mcV$sp$6.apply(ActiveObjectLifecycleSpec.scala:130)
...
at sbt.Distributor$Run$Worker.run(ParallelRunner.scala:131)
Leave a comment
on 2010-07-07 01:11 *
By Irmo Manie
Ah, nice one :)
What happens is that the 'unschedule' tries to send a message to a private actor within the scheduler itself. This is then just stopped by the shutdownAll.
What happens is that the 'unschedule' tries to send a message to a private actor within the scheduler itself. This is then just stopped by the shutdownAll.
(In revision:9b3aed1e293abdd8855b1d31baf037b28c2c85cc) Closes #318: Race condition between ActorRef.cancelReceiveTimeout and ActorRegistry.shutdownAll
Branch: master
Branch: master