summaryrefslogtreecommitdiff
path: root/java/src/IceInternal/ObjectFactoryManager.java
diff options
context:
space:
mode:
authorBernard Normier <bernard@zeroc.com>2006-06-15 16:48:28 +0000
committerBernard Normier <bernard@zeroc.com>2006-06-15 16:48:28 +0000
commit933f607ee28ff7fcdc5d1b1f59c1fdc8278d770c (patch)
tree6480c82524d60aa531f35e5e3ed11745192cf2f7 /java/src/IceInternal/ObjectFactoryManager.java
parentPartial fix bug #472 (diff)
downloadice-933f607ee28ff7fcdc5d1b1f59c1fdc8278d770c.tar.bz2
ice-933f607ee28ff7fcdc5d1b1f59c1fdc8278d770c.tar.xz
ice-933f607ee28ff7fcdc5d1b1f59c1fdc8278d770c.zip
Partial fix for bug #472
Diffstat (limited to 'java/src/IceInternal/ObjectFactoryManager.java')
-rw-r--r--java/src/IceInternal/ObjectFactoryManager.java36
1 files changed, 23 insertions, 13 deletions
diff --git a/java/src/IceInternal/ObjectFactoryManager.java b/java/src/IceInternal/ObjectFactoryManager.java
index 65e2126b995..5dd73bf5ea6 100644
--- a/java/src/IceInternal/ObjectFactoryManager.java
+++ b/java/src/IceInternal/ObjectFactoryManager.java
@@ -25,21 +25,25 @@ public final class ObjectFactoryManager
_factoryMap.put(id, factory);
}
- public synchronized void
+ public void
remove(String id)
{
- Object o = _factoryMap.get(id);
- if(o == null)
+ Object o = null;
+
+ synchronized(this)
{
- Ice.NotRegisteredException ex = new Ice.NotRegisteredException();
- ex.id = id;
- ex.kindOfObject = "object factory";
- throw ex;
+ o = _factoryMap.get(id);
+ if(o == null)
+ {
+ Ice.NotRegisteredException ex = new Ice.NotRegisteredException();
+ ex.id = id;
+ ex.kindOfObject = "object factory";
+ throw ex;
+ }
+ _factoryMap.remove(id);
}
- ((Ice.ObjectFactory)o).destroy();
-
- _factoryMap.remove(id);
+ ((Ice.ObjectFactory)o).destroy();
}
public synchronized Ice.ObjectFactory
@@ -55,16 +59,22 @@ public final class ObjectFactoryManager
{
}
- synchronized void
+ void
destroy()
{
- java.util.Iterator i = _factoryMap.values().iterator();
+ java.util.Map oldMap = null;
+ synchronized(this)
+ {
+ oldMap = _factoryMap;
+ _factoryMap = new java.util.HashMap();
+ }
+
+ java.util.Iterator i = oldMap.values().iterator();
while(i.hasNext())
{
Ice.ObjectFactory factory = (Ice.ObjectFactory)i.next();
factory.destroy();
}
- _factoryMap.clear();
}
private java.util.HashMap _factoryMap = new java.util.HashMap();