diff options
Diffstat (limited to 'java/src')
-rw-r--r-- | java/src/Ice/ConnectionI.java | 13 | ||||
-rw-r--r-- | java/src/IceInternal/ProxyFactory.java | 3 | ||||
-rw-r--r-- | java/src/IceInternal/RouterInfo.java | 5 |
3 files changed, 20 insertions, 1 deletions
diff --git a/java/src/Ice/ConnectionI.java b/java/src/Ice/ConnectionI.java index e938f5c1d37..f720448fdbf 100644 --- a/java/src/Ice/ConnectionI.java +++ b/java/src/Ice/ConnectionI.java @@ -1219,7 +1219,18 @@ public final class ConnectionI extends IceInternal.EventHandler implements Conne { if(--_dispatchCount == 0) { - if(_state == StateFinished) + if(_state == StateClosing) + { + try + { + initiateShutdown(); + } + catch(LocalException ex) + { + setState(StateClosed, ex); + } + } + else if(_state == StateFinished) { _reaper.add(this); } diff --git a/java/src/IceInternal/ProxyFactory.java b/java/src/IceInternal/ProxyFactory.java index ab75548f14e..15091ed1fe5 100644 --- a/java/src/IceInternal/ProxyFactory.java +++ b/java/src/IceInternal/ProxyFactory.java @@ -129,6 +129,9 @@ public final class ProxyFactory // must *always* retry, so that the missing proxy is added // to the router. // + + ref.getRouterInfo().clearCache(ref); + if(traceLevels.retry >= 1) { String s = "retrying operation call to add proxy to router\n" + ex.toString(); diff --git a/java/src/IceInternal/RouterInfo.java b/java/src/IceInternal/RouterInfo.java index 5517fc5bb87..21dcab3bc1e 100644 --- a/java/src/IceInternal/RouterInfo.java +++ b/java/src/IceInternal/RouterInfo.java @@ -223,6 +223,11 @@ public final class RouterInfo return _adapter; } + public synchronized void clearCache(Reference ref) + { + _identities.remove(ref.getIdentity()); + } + private synchronized EndpointI[] setClientEndpoints(Ice.ObjectPrx clientProxy) { |