From d7ae45dd7532f530be6cd760b5d7db70e840444f Mon Sep 17 00:00:00 2001 From: Viktor Klang Date: Fri, 11 Feb 2011 20:13:42 +0100 Subject: [PATCH] Potential fix for race-condition in RemoteClient --- .../main/scala/akka/remote/netty/NettyRemoteSupport.scala | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/akka-remote/src/main/scala/akka/remote/netty/NettyRemoteSupport.scala b/akka-remote/src/main/scala/akka/remote/netty/NettyRemoteSupport.scala index 4fbfad511c..57ec178ace 100644 --- a/akka-remote/src/main/scala/akka/remote/netty/NettyRemoteSupport.scala +++ b/akka-remote/src/main/scala/akka/remote/netty/NettyRemoteSupport.scala @@ -210,16 +210,16 @@ abstract class RemoteClient private[akka] ( } else { val futureResult = if (senderFuture.isDefined) senderFuture.get else new DefaultCompletableFuture[T](request.getActorInfo.getTimeout) - + val futureUuid = uuidFrom(request.getUuid.getHigh, request.getUuid.getLow) + futures.put(futureUuid, futureResult) //Add this prematurely, remove it if write fails currentChannel.write(request).addListener(new ChannelFutureListener { def operationComplete(future: ChannelFuture) { if (future.isCancelled) { + futures.remove(futureUuid) //Clean this up //We don't care about that right now } else if (!future.isSuccess) { + futures.remove(futureUuid) //Clean this up notifyListeners(RemoteClientWriteFailed(request, future.getCause, module, remoteAddress)) - } else { - val futureUuid = uuidFrom(request.getUuid.getHigh, request.getUuid.getLow) - futures.put(futureUuid, futureResult) } } })