summaryrefslogtreecommitdiff
path: root/java/src/Ice/ConnectionI.java
diff options
context:
space:
mode:
authorDwayne Boone <dwayne@zeroc.com>2014-09-22 10:54:30 -0230
committerDwayne Boone <dwayne@zeroc.com>2014-09-22 10:54:30 -0230
commit2adece994af052395e0372958b63a9d95ea1b20b (patch)
treefd159f56092a67a799511f6979401479d6dba0f1 /java/src/Ice/ConnectionI.java
parentICE-5660 Colloc-only object adapters (diff)
downloadice-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.java31
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)