summaryrefslogtreecommitdiff
path: root/java/src/IceInternal/ServantManager.java
diff options
context:
space:
mode:
authorJose <jose@zeroc.com>2009-08-12 00:34:01 +0200
committerJose <jose@zeroc.com>2009-08-12 00:34:01 +0200
commitef47c8a38690a16e8b42b5fbbefdd8610fe97d8e (patch)
treef0ebfb34e207958b29bd8b74c471ed18c6ee10b2 /java/src/IceInternal/ServantManager.java
parentAdditional fix for bug 4019 (diff)
downloadice-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.java36
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;