summaryrefslogtreecommitdiff
path: root/java/src/IceInternal/ObjectAdapterFactory.java
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2009-09-09 11:18:02 +0200
committerBenoit Foucher <benoit@zeroc.com>2009-09-09 11:18:02 +0200
commit5a57091655dc71d3b5f57c2df2fa835b7047e560 (patch)
tree97bc10b738d991baf2ba936b15e7fd60feb9e3da /java/src/IceInternal/ObjectAdapterFactory.java
parentMore scalable connection reaping (diff)
downloadice-5a57091655dc71d3b5f57c2df2fa835b7047e560.tar.bz2
ice-5a57091655dc71d3b5f57c2df2fa835b7047e560.tar.xz
ice-5a57091655dc71d3b5f57c2df2fa835b7047e560.zip
Fixed bug 4249 - waitForHold waits outside the OA sync
Diffstat (limited to 'java/src/IceInternal/ObjectAdapterFactory.java')
-rw-r--r--java/src/IceInternal/ObjectAdapterFactory.java80
1 files changed, 17 insertions, 63 deletions
diff --git a/java/src/IceInternal/ObjectAdapterFactory.java b/java/src/IceInternal/ObjectAdapterFactory.java
index 85980cf68f5..381a317e6e5 100644
--- a/java/src/IceInternal/ObjectAdapterFactory.java
+++ b/java/src/IceInternal/ObjectAdapterFactory.java
@@ -29,7 +29,7 @@ public final class ObjectAdapterFactory
_instance = null;
_communicator = null;
- adapters = _adapters;
+ adapters = new java.util.LinkedList<Ice.ObjectAdapterI>(_adapters);
notifyAll();
}
@@ -38,12 +38,9 @@ public final class ObjectAdapterFactory
// Deactivate outside the thread synchronization, to avoid
// deadlocks.
//
- if(adapters != null)
+ for(Ice.ObjectAdapterI adapter : adapters)
{
- for(Ice.ObjectAdapterI adapter : adapters)
- {
- adapter.deactivate();
- }
+ adapter.deactivate();
}
}
@@ -66,43 +63,16 @@ public final class ObjectAdapterFactory
{
}
}
-
- //
- // If some other thread is currently shutting down, we wait
- // until this thread is finished.
- //
- while(_waitForShutdown)
- {
- try
- {
- wait();
- }
- catch(InterruptedException ex)
- {
- }
- }
- _waitForShutdown = true;
- adapters = _adapters;
+
+ adapters = new java.util.LinkedList<Ice.ObjectAdapterI>(_adapters);
}
//
// Now we wait for deactivation of each object adapter.
//
- if(adapters != null)
- {
- for(Ice.ObjectAdapterI adapter : adapters)
- {
- adapter.waitForDeactivate();
- }
- }
-
- synchronized(this)
+ for(Ice.ObjectAdapterI adapter : adapters)
{
- //
- // Signal that waiting is complete.
- //
- _waitForShutdown = false;
- notifyAll();
+ adapter.waitForDeactivate();
}
}
@@ -123,25 +93,17 @@ public final class ObjectAdapterFactory
java.util.List<Ice.ObjectAdapterI> adapters;
synchronized(this)
{
- adapters = _adapters;
+ adapters = new java.util.LinkedList<Ice.ObjectAdapterI>(_adapters);
+ }
- //
- // For consistency with C#, we set _adapters to null
- // so that our finalizer does not try to invoke any
- // methods on member objects.
- //
- _adapters = null;
+ for(Ice.ObjectAdapterI adapter : adapters)
+ {
+ adapter.destroy();
}
- //
- // Now we destroy each object adapter.
- //
- if(adapters != null)
+ synchronized(this)
{
- for(Ice.ObjectAdapterI adapter : adapters)
- {
- adapter.destroy();
- }
+ _adapters.clear();
}
}
@@ -183,7 +145,7 @@ public final class ObjectAdapterFactory
return null;
}
- adapters = _adapters;
+ adapters = new java.util.LinkedList<Ice.ObjectAdapterI>(_adapters);
}
for(Ice.ObjectAdapterI adapter : adapters)
@@ -222,12 +184,7 @@ public final class ObjectAdapterFactory
java.util.List<Ice.ObjectAdapterI> adapters;
synchronized(this)
{
- if(_adapters == null)
- {
- return;
- }
-
- adapters = _adapters;
+ adapters = new java.util.LinkedList<Ice.ObjectAdapterI>(_adapters);
}
for(Ice.ObjectAdapterI adapter : adapters)
@@ -243,7 +200,6 @@ public final class ObjectAdapterFactory
{
_instance = instance;
_communicator = communicator;
- _waitForShutdown = false;
}
protected synchronized void
@@ -252,8 +208,7 @@ public final class ObjectAdapterFactory
{
IceUtilInternal.Assert.FinalizerAssert(_instance == null);
IceUtilInternal.Assert.FinalizerAssert(_communicator == null);
- IceUtilInternal.Assert.FinalizerAssert(_adapters == null);
- IceUtilInternal.Assert.FinalizerAssert(!_waitForShutdown);
+ //IceUtilInternal.Assert.FinalizerAssert(_adapters.isEmpty())
super.finalize();
}
@@ -262,5 +217,4 @@ public final class ObjectAdapterFactory
private Ice.Communicator _communicator;
private java.util.Set<String> _adapterNamesInUse = new java.util.HashSet<String>();
private java.util.List<Ice.ObjectAdapterI> _adapters = new java.util.LinkedList<Ice.ObjectAdapterI>();
- private boolean _waitForShutdown;
}