diff options
author | Benoit Foucher <benoit@zeroc.com> | 2014-09-26 18:39:28 +0200 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2014-09-26 18:39:28 +0200 |
commit | aa3c4ebfa279188cf689c6ef2318ed573c4fec7b (patch) | |
tree | c7c1c9b7b6ce2daee3cd9b5507a49d3520fd1d06 /java/src/IceInternal/ConnectionRequestHandler.java | |
parent | Slightly improved fix for ICE-3692 (diff) | |
download | ice-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.java | 35 |
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 |