diff options
author | Benoit Foucher <benoit@zeroc.com> | 2009-09-09 11:18:02 +0200 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2009-09-09 11:18:02 +0200 |
commit | 5a57091655dc71d3b5f57c2df2fa835b7047e560 (patch) | |
tree | 97bc10b738d991baf2ba936b15e7fd60feb9e3da /cpp/src/Ice/ObjectAdapterFactory.cpp | |
parent | More scalable connection reaping (diff) | |
download | ice-5a57091655dc71d3b5f57c2df2fa835b7047e560.tar.bz2 ice-5a57091655dc71d3b5f57c2df2fa835b7047e560.tar.xz ice-5a57091655dc71d3b5f57c2df2fa835b7047e560.zip |
Fixed bug 4249 - waitForHold waits outside the OA sync
Diffstat (limited to 'cpp/src/Ice/ObjectAdapterFactory.cpp')
-rw-r--r-- | cpp/src/Ice/ObjectAdapterFactory.cpp | 30 |
1 files changed, 7 insertions, 23 deletions
diff --git a/cpp/src/Ice/ObjectAdapterFactory.cpp b/cpp/src/Ice/ObjectAdapterFactory.cpp index 1fc6e3d88f4..54f673efa65 100644 --- a/cpp/src/Ice/ObjectAdapterFactory.cpp +++ b/cpp/src/Ice/ObjectAdapterFactory.cpp @@ -67,15 +67,6 @@ IceInternal::ObjectAdapterFactory::waitForShutdown() wait(); } - // - // If some other thread is currently shutting down, we wait - // until this thread is finished. - // - while(_waitForShutdown) - { - wait(); - } - _waitForShutdown = true; adapters = _adapters; } @@ -83,16 +74,6 @@ IceInternal::ObjectAdapterFactory::waitForShutdown() // Now we wait for deactivation of each object adapter. // for_each(adapters.begin(), adapters.end(), IceUtil::voidMemFun(&ObjectAdapter::waitForDeactivate)); - - { - IceUtil::Monitor<IceUtil::RecMutex>::Lock sync(*this); - - // - // Signal that waiting is complete. - // - _waitForShutdown = false; - notifyAll(); - } } bool @@ -115,13 +96,18 @@ IceInternal::ObjectAdapterFactory::destroy() { IceUtil::Monitor<IceUtil::RecMutex>::Lock sync(*this); - adapters.swap(_adapters); + adapters = _adapters; } // // Now we destroy each object adapter. // for_each(adapters.begin(), adapters.end(), IceUtil::voidMemFun(&ObjectAdapter::destroy)); + + { + IceUtil::Monitor<IceUtil::RecMutex>::Lock sync(*this); + _adapters.clear(); + } } ObjectAdapterPtr @@ -223,8 +209,7 @@ IceInternal::ObjectAdapterFactory::flushBatchRequests() const IceInternal::ObjectAdapterFactory::ObjectAdapterFactory(const InstancePtr& instance, const CommunicatorPtr& communicator) : _instance(instance), - _communicator(communicator), - _waitForShutdown(false) + _communicator(communicator) { } @@ -233,5 +218,4 @@ IceInternal::ObjectAdapterFactory::~ObjectAdapterFactory() assert(!_instance); assert(!_communicator); assert(_adapters.empty()); - assert(!_waitForShutdown); } |