summaryrefslogtreecommitdiff
path: root/cs/src/Ice/ObjectAdapterFactory.cs
diff options
context:
space:
mode:
Diffstat (limited to 'cs/src/Ice/ObjectAdapterFactory.cs')
-rw-r--r--cs/src/Ice/ObjectAdapterFactory.cs69
1 files changed, 58 insertions, 11 deletions
diff --git a/cs/src/Ice/ObjectAdapterFactory.cs b/cs/src/Ice/ObjectAdapterFactory.cs
index 90a95d31d5b..d5776d74da7 100644
--- a/cs/src/Ice/ObjectAdapterFactory.cs
+++ b/cs/src/Ice/ObjectAdapterFactory.cs
@@ -19,7 +19,8 @@ namespace IceInternal
public void shutdown()
{
List<Ice.ObjectAdapterI> adapters;
- lock(this)
+ _m.Lock();
+ try
{
//
// Ignore shutdown requests if the object adapter factory has
@@ -35,7 +36,11 @@ namespace IceInternal
instance_ = null;
_communicator = null;
- System.Threading.Monitor.PulseAll(this);
+ _m.NotifyAll();
+ }
+ finally
+ {
+ _m.Unlock();
}
//
@@ -51,18 +56,23 @@ namespace IceInternal
public void waitForShutdown()
{
List<Ice.ObjectAdapterI> adapters;
- lock(this)
+ _m.Lock();
+ try
{
//
// First we wait for the shutdown of the factory itself.
//
while(instance_ != null)
{
- System.Threading.Monitor.Wait(this);
+ _m.Wait();
}
adapters = new List<Ice.ObjectAdapterI>(_adapters);
}
+ finally
+ {
+ _m.Unlock();
+ }
//
// Now we wait for deactivation of each object adapter.
@@ -75,10 +85,15 @@ namespace IceInternal
public bool isShutdown()
{
- lock(this)
+ _m.Lock();
+ try
{
return instance_ == null;
}
+ finally
+ {
+ _m.Unlock();
+ }
}
public void destroy()
@@ -89,25 +104,36 @@ namespace IceInternal
waitForShutdown();
List<Ice.ObjectAdapterI> adapters;
- lock(this)
+ _m.Lock();
+ try
{
adapters = new List<Ice.ObjectAdapterI>(_adapters);
}
+ finally
+ {
+ _m.Unlock();
+ }
foreach(Ice.ObjectAdapter adapter in adapters)
{
adapter.destroy();
}
- lock(this)
+ _m.Lock();
+ try
{
_adapters.Clear();
}
+ finally
+ {
+ _m.Unlock();
+ }
}
public Ice.ObjectAdapter createObjectAdapter(string name, Ice.RouterPrx router)
{
- lock(this)
+ _m.Lock();
+ try
{
if(instance_ == null)
{
@@ -135,12 +161,17 @@ namespace IceInternal
_adapters.Add(adapter);
return adapter;
}
+ finally
+ {
+ _m.Unlock();
+ }
}
public Ice.ObjectAdapter findObjectAdapter(Ice.ObjectPrx proxy)
{
List<Ice.ObjectAdapterI> adapters;
- lock(this)
+ _m.Lock();
+ try
{
if(instance_ == null)
{
@@ -149,6 +180,10 @@ namespace IceInternal
adapters = new List<Ice.ObjectAdapterI>(_adapters);
}
+ finally
+ {
+ _m.Unlock();
+ }
foreach(Ice.ObjectAdapterI adapter in adapters)
{
@@ -170,7 +205,8 @@ namespace IceInternal
public void removeObjectAdapter(Ice.ObjectAdapterI adapter)
{
- lock(this)
+ _m.Lock();
+ try
{
if(instance_ == null)
{
@@ -180,15 +216,24 @@ namespace IceInternal
_adapters.Remove(adapter);
_adapterNamesInUse.Remove(adapter.getName());
}
+ finally
+ {
+ _m.Unlock();
+ }
}
public void flushAsyncBatchRequests(CommunicatorBatchOutgoingAsync outAsync)
{
List<Ice.ObjectAdapterI> adapters;
- lock(this)
+ _m.Lock();
+ try
{
adapters = new List<Ice.ObjectAdapterI>(_adapters);
}
+ finally
+ {
+ _m.Unlock();
+ }
foreach(Ice.ObjectAdapterI adapter in adapters)
{
@@ -211,6 +256,8 @@ namespace IceInternal
private Ice.Communicator _communicator;
private HashSet<string> _adapterNamesInUse;
private List<Ice.ObjectAdapterI> _adapters;
+
+ private readonly IceUtilInternal.Monitor _m = new IceUtilInternal.Monitor();
}
}