diff options
author | Dwayne Boone <dwayne@zeroc.com> | 2005-08-24 16:43:37 +0000 |
---|---|---|
committer | Dwayne Boone <dwayne@zeroc.com> | 2005-08-24 16:43:37 +0000 |
commit | 4f81a765b310c1365e27196bd97bd90a0a0ac174 (patch) | |
tree | 1ccecfec8b414dfbf79b513cb606de30dcb46403 /java/src/IceInternal/ObjectAdapterFactory.java | |
parent | trap exception from checkedCast (diff) | |
download | ice-4f81a765b310c1365e27196bd97bd90a0a0ac174.tar.bz2 ice-4f81a765b310c1365e27196bd97bd90a0a0ac174.tar.xz ice-4f81a765b310c1365e27196bd97bd90a0a0ac174.zip |
Modified sync in shutdown
Diffstat (limited to 'java/src/IceInternal/ObjectAdapterFactory.java')
-rw-r--r-- | java/src/IceInternal/ObjectAdapterFactory.java | 41 |
1 files changed, 25 insertions, 16 deletions
diff --git a/java/src/IceInternal/ObjectAdapterFactory.java b/java/src/IceInternal/ObjectAdapterFactory.java index f3548057bb0..db364e0b4cf 100644 --- a/java/src/IceInternal/ObjectAdapterFactory.java +++ b/java/src/IceInternal/ObjectAdapterFactory.java @@ -11,29 +11,38 @@ package IceInternal; public final class ObjectAdapterFactory { - public synchronized void + public void shutdown() { - // - // Ignore shutdown requests if the object adapter factory has - // already been shut down. - // - if(_instance == null) + Ice.ObjectAdapter[] adapters; + + synchronized(this) { - return; + // + // Ignore shutdown requests if the object adapter factory has + // already been shut down. + // + if(_instance == null) + { + return; + } + + adapters = (Ice.ObjectAdapter[])_adapters.values().toArray(new Ice.ObjectAdapter[0]); + + _instance = null; + _communicator = null; + + notifyAll(); } - java.util.Iterator i = _adapters.values().iterator(); - while(i.hasNext()) + // + // Deactivate outside the thread synchronization, to avoid + // deadlocks. + // + for(int i = 0; i < adapters.length; ++i) { - Ice.ObjectAdapter adapter = (Ice.ObjectAdapter)i.next(); - adapter.deactivate(); + adapters[i].deactivate(); } - - _instance = null; - _communicator = null; - - notifyAll(); } public void |