summaryrefslogtreecommitdiff
path: root/java/src
diff options
context:
space:
mode:
Diffstat (limited to 'java/src')
-rw-r--r--java/src/Ice/ConnectionI.java13
-rw-r--r--java/src/IceInternal/ProxyFactory.java3
-rw-r--r--java/src/IceInternal/RouterInfo.java5
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)
{