diff options
author | Dwayne Boone <dwayne@zeroc.com> | 2014-09-22 10:54:30 -0230 |
---|---|---|
committer | Dwayne Boone <dwayne@zeroc.com> | 2014-09-22 10:54:30 -0230 |
commit | 2adece994af052395e0372958b63a9d95ea1b20b (patch) | |
tree | fd159f56092a67a799511f6979401479d6dba0f1 /java/src/Ice/ConnectionI.java | |
parent | ICE-5660 Colloc-only object adapters (diff) | |
download | ice-2adece994af052395e0372958b63a9d95ea1b20b.tar.bz2 ice-2adece994af052395e0372958b63a9d95ea1b20b.tar.xz ice-2adece994af052395e0372958b63a9d95ea1b20b.zip |
ICE-5585 Connection::setCallback should always invoke the callback
Diffstat (limited to 'java/src/Ice/ConnectionI.java')
-rw-r--r-- | java/src/Ice/ConnectionI.java | 31 |
1 files changed, 25 insertions, 6 deletions
diff --git a/java/src/Ice/ConnectionI.java b/java/src/Ice/ConnectionI.java index e3c555f6174..38846212228 100644 --- a/java/src/Ice/ConnectionI.java +++ b/java/src/Ice/ConnectionI.java @@ -246,7 +246,7 @@ public final class ConnectionI extends IceInternal.EventHandler implements Conne } assert (_instance.initializationData().observer != null); - _observer = _instance.initializationData().observer.getConnectionObserver(initConnectionInfo(), + _observer = _instance.initializationData().observer.getConnectionObserver(initConnectionInfo(), _endpoint, toConnectionState(_state), _observer); @@ -716,11 +716,30 @@ public final class ConnectionI extends IceInternal.EventHandler implements Conne @Override synchronized public void setCallback(ConnectionCallback callback) { - if(_state > StateClosing) + boolean closed = false; + synchronized(this) { - return; + if(_state > StateClosing) + { + closed = true; + } + else + { + _callback = callback; + } + } + + if(closed) + { + try + { + callback.closed(this); + } + catch(Exception ex) + { + _logger.error("connection callback exception:\n" + ex + '\n' + _desc); + } } - _callback = callback; } @Override @@ -1889,8 +1908,8 @@ public final class ConnectionI extends IceInternal.EventHandler implements Conne Ice.Instrumentation.ConnectionState newState = toConnectionState(state); if(oldState != newState) { - _observer = _instance.initializationData().observer.getConnectionObserver(initConnectionInfo(), - _endpoint, + _observer = _instance.initializationData().observer.getConnectionObserver(initConnectionInfo(), + _endpoint, newState, _observer); if(_observer != null) |