summaryrefslogtreecommitdiff
path: root/cs/src/Ice/ObjectAdapterFactory.cs
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2007-07-04 18:23:08 +0200
committerBenoit Foucher <benoit@zeroc.com>2007-07-04 18:33:11 +0200
commit58959bf32bfe6bc0801a796a88f10ef242bba62f (patch)
tree31025032dd456dbc4db164485cbf313e8bb9688d /cs/src/Ice/ObjectAdapterFactory.cs
parentFix repeated relink (see bug 740). (diff)
downloadice-58959bf32bfe6bc0801a796a88f10ef242bba62f.tar.bz2
ice-58959bf32bfe6bc0801a796a88f10ef242bba62f.tar.xz
ice-58959bf32bfe6bc0801a796a88f10ef242bba62f.zip
Fixed bug 2286
Diffstat (limited to 'cs/src/Ice/ObjectAdapterFactory.cs')
-rwxr-xr-xcs/src/Ice/ObjectAdapterFactory.cs57
1 files changed, 32 insertions, 25 deletions
diff --git a/cs/src/Ice/ObjectAdapterFactory.cs b/cs/src/Ice/ObjectAdapterFactory.cs
index 2a4d18512f4..21ca7715ba3 100755
--- a/cs/src/Ice/ObjectAdapterFactory.cs
+++ b/cs/src/Ice/ObjectAdapterFactory.cs
@@ -19,7 +19,6 @@ namespace IceInternal
public void shutdown()
{
Hashtable adapters;
-
lock(this)
{
//
@@ -51,6 +50,7 @@ namespace IceInternal
public void waitForShutdown()
{
+ Hashtable adapters;
lock(this)
{
//
@@ -70,14 +70,15 @@ namespace IceInternal
System.Threading.Monitor.Wait(this);
}
_waitForShutdown = true;
+ adapters = _adapters;
}
//
// Now we wait for deactivation of each object adapter.
//
- if(_adapters != null)
+ if(adapters != null)
{
- foreach(Ice.ObjectAdapter adapter in _adapters.Values)
+ foreach(Ice.ObjectAdapter adapter in adapters.Values)
{
adapter.waitForDeactivate();
}
@@ -109,7 +110,6 @@ namespace IceInternal
waitForShutdown();
Hashtable adapters;
-
lock(this)
{
adapters = _adapters;
@@ -121,9 +121,12 @@ namespace IceInternal
_adapters = null;
}
- foreach(Ice.ObjectAdapter adapter in adapters.Values)
+ if(adapters != null)
{
- adapter.destroy();
+ foreach(Ice.ObjectAdapter adapter in adapters.Values)
+ {
+ adapter.destroy();
+ }
}
}
@@ -169,6 +172,7 @@ namespace IceInternal
public Ice.ObjectAdapter findObjectAdapter(Ice.ObjectPrx proxy)
{
+ ArrayList adapters;
lock(this)
{
if(instance_ == null)
@@ -176,32 +180,32 @@ namespace IceInternal
return null;
}
- IEnumerator i = _adapters.Values.GetEnumerator();
- while(i.MoveNext())
+ adapters = new ArrayList(_adapters.Values);
+ }
+
+ foreach(Ice.ObjectAdapterI adapter in adapters)
+ {
+ try
{
- Ice.ObjectAdapterI adapter = (Ice.ObjectAdapterI)i.Current;
- try
+ if(adapter.isLocal(proxy))
{
- if(adapter.isLocal(proxy))
- {
- return adapter;
- }
- }
- catch(Ice.ObjectAdapterDeactivatedException)
- {
- // Ignore.
+ return adapter;
}
}
-
- return null;
+ catch(Ice.ObjectAdapterDeactivatedException)
+ {
+ // Ignore.
+ }
}
+
+ return null;
}
public void removeObjectAdapter(string name)
{
lock(this)
{
- if(_waitForShutdown || _adapters == null)
+ if(instance_ == null)
{
return;
}
@@ -212,15 +216,18 @@ namespace IceInternal
public void flushBatchRequests()
{
- LinkedList a = new LinkedList();
+ ArrayList adapters;
lock(this)
{
- foreach(Ice.ObjectAdapterI adapter in _adapters.Values)
+ if(_adapters == null)
{
- a.Add(adapter);
+ return;
}
+
+ adapters = new ArrayList(_adapters.Values);
}
- foreach(Ice.ObjectAdapterI adapter in a)
+
+ foreach(Ice.ObjectAdapterI adapter in adapters)
{
adapter.flushBatchRequests();
}