From cf4891fc9af5eba475d9bf5fce7e18d99439edee Mon Sep 17 00:00:00 2001 From: Viktor Klang Date: Mon, 10 May 2010 21:51:00 +0200 Subject: [PATCH] Fixed potential stack overflow --- ...orBasedEventDrivenWorkStealingDispatcher.scala | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/akka-core/src/main/scala/dispatch/ExecutorBasedEventDrivenWorkStealingDispatcher.scala b/akka-core/src/main/scala/dispatch/ExecutorBasedEventDrivenWorkStealingDispatcher.scala index 289645ee7d..28a58a5784 100644 --- a/akka-core/src/main/scala/dispatch/ExecutorBasedEventDrivenWorkStealingDispatcher.scala +++ b/akka-core/src/main/scala/dispatch/ExecutorBasedEventDrivenWorkStealingDispatcher.scala @@ -131,23 +131,14 @@ class ExecutorBasedEventDrivenWorkStealingDispatcher(_name: String) extends Mess private def tryDonateAndProcessMessages(receiver: ActorRef, thief: ActorRef) = { if (thief._dispatcherLock.tryLock) { try { - donateAndProcessMessages(receiver, thief) + while(donateMessage(receiver, thief)) + processMailbox(thief) } finally { thief._dispatcherLock.unlock } } } - /** - * Donate messages to the thief and process them on the thief as long as the receiver has more messages. - */ - private def donateAndProcessMessages(receiver: ActorRef, thief: ActorRef): Unit = { - if(donateMessage(receiver, thief)) { - processMailbox(thief) - donateAndProcessMessages(receiver, thief) - } - } - /** * Steal a message from the receiver and give it to the thief. */ @@ -155,7 +146,7 @@ class ExecutorBasedEventDrivenWorkStealingDispatcher(_name: String) extends Mess val donated = receiver._mailbox.pollLast if (donated ne null) { donated.replyTo match { - case None => thief.self.!(donated.message)(None) + case None => thief.self.postMessageToMailbox(donated.message,None) case Some(Left(actor)) => thief.self.postMessageToMailbox(donated.message,Some(actor)) case Some(Right(future)) => thief.self.postMessageToMailboxAndCreateFutureResultWithTimeout[Any](donated.message,receiver.timeout,Some(future)) }