diff options
author | Bernard Normier <bernard@zeroc.com> | 2006-06-15 16:48:28 +0000 |
---|---|---|
committer | Bernard Normier <bernard@zeroc.com> | 2006-06-15 16:48:28 +0000 |
commit | 933f607ee28ff7fcdc5d1b1f59c1fdc8278d770c (patch) | |
tree | 6480c82524d60aa531f35e5e3ed11745192cf2f7 /java/src/IceInternal/ObjectFactoryManager.java | |
parent | Partial fix bug #472 (diff) | |
download | ice-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.java | 36 |
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(); |