diff options
Diffstat (limited to 'cs/src/Ice/ObjectAdapterFactory.cs')
-rw-r--r-- | cs/src/Ice/ObjectAdapterFactory.cs | 69 |
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(); } } |