summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/ObjectAdapterFactory.cpp
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 /cpp/src/Ice/ObjectAdapterFactory.cpp
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 'cpp/src/Ice/ObjectAdapterFactory.cpp')
-rw-r--r--cpp/src/Ice/ObjectAdapterFactory.cpp30
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);
}