diff options
author | Jose <jose@zeroc.com> | 2009-08-12 00:34:01 +0200 |
---|---|---|
committer | Jose <jose@zeroc.com> | 2009-08-12 00:34:01 +0200 |
commit | ef47c8a38690a16e8b42b5fbbefdd8610fe97d8e (patch) | |
tree | f0ebfb34e207958b29bd8b74c471ed18c6ee10b2 /java/src/IceInternal/ServantManager.java | |
parent | Additional fix for bug 4019 (diff) | |
download | ice-ef47c8a38690a16e8b42b5fbbefdd8610fe97d8e.tar.bz2 ice-ef47c8a38690a16e8b42b5fbbefdd8610fe97d8e.tar.xz ice-ef47c8a38690a16e8b42b5fbbefdd8610fe97d8e.zip |
2564 ObjectAdapter::removeServantLocator issues.
Diffstat (limited to 'java/src/IceInternal/ServantManager.java')
-rw-r--r-- | java/src/IceInternal/ServantManager.java | 36 |
1 files changed, 20 insertions, 16 deletions
diff --git a/java/src/IceInternal/ServantManager.java b/java/src/IceInternal/ServantManager.java index 01ded95ffd0..8f6dd6cb756 100644 --- a/java/src/IceInternal/ServantManager.java +++ b/java/src/IceInternal/ServantManager.java @@ -229,13 +229,10 @@ public final class ServantManager public synchronized Ice.ServantLocator removeServantLocator(String category) { + Ice.ServantLocator l = null; assert(_instance != null); // Must not be called after destruction. - - Ice.ServantLocator l = _locatorMap.remove(category); - if(l != null) - { - l.deactivate(category); - } + + l = _locatorMap.remove(category); return l; } @@ -266,15 +263,26 @@ public final class ServantManager // // Only for use by Ice.ObjectAdapterI. // - public synchronized void + public void destroy() { - assert(_instance != null); // Must not be called after destruction. - - _servantMapMap.clear(); + Object[] locatorMap = null; + Ice.Logger logger = null; + synchronized(this) + { + assert(_instance != null); // Must not be called after destruction. + logger = _instance.initializationData().logger; + _servantMapMap.clear(); + _locatorMap.clear(); + locatorMap = _locatorMap.entrySet().toArray(); + _instance = null; + } - for(java.util.Map.Entry<String, Ice.ServantLocator> p : _locatorMap.entrySet()) + for(int i = 0; i < locatorMap.length; ++i) { + @SuppressWarnings("unchecked") + java.util.Map.Entry<String, Ice.ServantLocator> p = + (java.util.Map.Entry<String, Ice.ServantLocator>)locatorMap[i]; Ice.ServantLocator locator = p.getValue(); try { @@ -288,13 +296,9 @@ public final class ServantManager pw.flush(); String s = "exception during locator deactivation:\n" + "object adapter: `" + _adapterName + "'\n" + "locator category: `" + p.getKey() + "'\n" + sw.toString(); - _instance.initializationData().logger.error(s); + logger.error(s); } } - - _locatorMap.clear(); - - _instance = null; } private Instance _instance; |