summaryrefslogtreecommitdiff
path: root/java/src/IceInternal/ConnectionRequestHandler.java
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2014-09-26 18:39:28 +0200
committerBenoit Foucher <benoit@zeroc.com>2014-09-26 18:39:28 +0200
commitaa3c4ebfa279188cf689c6ef2318ed573c4fec7b (patch)
treec7c1c9b7b6ce2daee3cd9b5507a49d3520fd1d06 /java/src/IceInternal/ConnectionRequestHandler.java
parentSlightly improved fix for ICE-3692 (diff)
downloadice-aa3c4ebfa279188cf689c6ef2318ed573c4fec7b.tar.bz2
ice-aa3c4ebfa279188cf689c6ef2318ed573c4fec7b.tar.xz
ice-aa3c4ebfa279188cf689c6ef2318ed573c4fec7b.zip
Fixed deadlock in connection binding code (ICE-5693)
Diffstat (limited to 'java/src/IceInternal/ConnectionRequestHandler.java')
-rw-r--r--java/src/IceInternal/ConnectionRequestHandler.java35
1 files changed, 35 insertions, 0 deletions
diff --git a/java/src/IceInternal/ConnectionRequestHandler.java b/java/src/IceInternal/ConnectionRequestHandler.java
index 5494b6f70e3..f7ca7bb5b29 100644
--- a/java/src/IceInternal/ConnectionRequestHandler.java
+++ b/java/src/IceInternal/ConnectionRequestHandler.java
@@ -12,6 +12,41 @@ package IceInternal;
public class ConnectionRequestHandler implements RequestHandler
{
@Override
+ public RequestHandler
+ connect()
+ {
+ assert(false); // This request handler is only created after connection binding.
+ return null;
+ }
+
+ @Override
+ public RequestHandler
+ update(RequestHandler previousHandler, RequestHandler newHandler)
+ {
+ try
+ {
+ if(previousHandler == this)
+ {
+ return newHandler;
+ }
+ else if(previousHandler.getConnection() == _connection)
+ {
+ //
+ // If both request handlers point to the same connection, we also
+ // update the request handler. See bug ICE-5489 for reasons why
+ // this can be useful.
+ //
+ return newHandler;
+ }
+ }
+ catch(Ice.Exception ex)
+ {
+ // Ignore
+ }
+ return this;
+ }
+
+ @Override
public void
prepareBatchRequest(BasicStream out)
throws RetryException