From 00a39232cc8273e54a6a472b49765c433553d2ce Mon Sep 17 00:00:00 2001 From: Roland Date: Sun, 20 Jan 2013 21:13:19 +0100 Subject: [PATCH] add debug helper for CallingThreadDispatcherModelSpec, see #2821 - the problem is that the user guardian gets blocked for more than 3 seconds, and I have no clue who blocks it where - therefore print all stack traces two seconds into the test if still not finished --- .../test/scala/akka/actor/dispatch/ActorModelSpec.scala | 9 +++++++++ .../src/main/scala/akka/actor/RepointableActorRef.scala | 4 ++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/akka-actor-tests/src/test/scala/akka/actor/dispatch/ActorModelSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/dispatch/ActorModelSpec.scala index 0073857809..09eb75f8cb 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/dispatch/ActorModelSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/dispatch/ActorModelSpec.scala @@ -420,12 +420,21 @@ abstract class ActorModelSpec(config: String) extends AkkaSpec(config) with Defa val f5 = try { a ? Interrupt } catch { case ie: InterruptedException ⇒ Promise.failed(new ActorInterruptedException(ie)).future } val f6 = a ? Reply("bar2") + val c = system.scheduler.scheduleOnce(2.seconds) { + import collection.JavaConverters._ + Thread.getAllStackTraces().asScala foreach { + case (thread, stack) ⇒ + println(s"$thread:") + stack foreach (s => println(s"\t$s")) + } + } assert(Await.result(f1, remaining) === "foo") assert(Await.result(f2, remaining) === "bar") assert(Await.result(f4, remaining) === "foo2") assert(intercept[ActorInterruptedException](Await.result(f3, remaining)).getCause.getMessage === "Ping!") assert(Await.result(f6, remaining) === "bar2") assert(intercept[ActorInterruptedException](Await.result(f5, remaining)).getCause.getMessage === "Ping!") + c.cancel() } } diff --git a/akka-actor/src/main/scala/akka/actor/RepointableActorRef.scala b/akka-actor/src/main/scala/akka/actor/RepointableActorRef.scala index 62cca3477b..fec648be06 100644 --- a/akka-actor/src/main/scala/akka/actor/RepointableActorRef.scala +++ b/akka-actor/src/main/scala/akka/actor/RepointableActorRef.scala @@ -212,7 +212,7 @@ private[akka] class UnstartedCell(val systemImpl: ActorSystemImpl, } else if (!queue.offer(msg)) { system.eventStream.publish(Warning(self.path.toString, getClass, "dropping message of type " + msg.message.getClass + " due to enqueue failure")) system.deadLetters ! DeadLetter(msg.message, msg.sender, self) - } + } else if (Mailbox.debug) println(s"$self temp queueing ${msg.message} from ${msg.sender}") } finally lock.unlock() } else { system.eventStream.publish(Warning(self.path.toString, getClass, "dropping message of type" + msg.message.getClass + " due to lock timeout")) @@ -243,7 +243,7 @@ private[akka] class UnstartedCell(val systemImpl: ActorSystemImpl, if (!wasEnqueued) { system.eventStream.publish(Warning(self.path.toString, getClass, "dropping system message " + msg + " due to enqueue failure")) system.deadLetters ! DeadLetter(msg, self, self) - } + } else if (Mailbox.debug) println(s"$self temp queueing system $msg") } } finally lock.unlock() } else {