summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/ObjectAdapterFactory.cpp
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 /cpp/src/Ice/ObjectAdapterFactory.cpp
parentFix repeated relink (see bug 740). (diff)
downloadice-58959bf32bfe6bc0801a796a88f10ef242bba62f.tar.bz2
ice-58959bf32bfe6bc0801a796a88f10ef242bba62f.tar.xz
ice-58959bf32bfe6bc0801a796a88f10ef242bba62f.zip
Fixed bug 2286
Diffstat (limited to 'cpp/src/Ice/ObjectAdapterFactory.cpp')
-rw-r--r--cpp/src/Ice/ObjectAdapterFactory.cpp25
1 files changed, 15 insertions, 10 deletions
diff --git a/cpp/src/Ice/ObjectAdapterFactory.cpp b/cpp/src/Ice/ObjectAdapterFactory.cpp
index 73fe10723b6..5ec4f2f0fb0 100644
--- a/cpp/src/Ice/ObjectAdapterFactory.cpp
+++ b/cpp/src/Ice/ObjectAdapterFactory.cpp
@@ -55,6 +55,8 @@ IceInternal::ObjectAdapterFactory::shutdown()
void
IceInternal::ObjectAdapterFactory::waitForShutdown()
{
+ map<string, ObjectAdapterIPtr> adapters;
+
{
IceUtil::Monitor<IceUtil::RecMutex>::Lock sync(*this);
@@ -80,7 +82,7 @@ IceInternal::ObjectAdapterFactory::waitForShutdown()
//
// Now we wait for deactivation of each object adapter.
//
- for_each(_adapters.begin(), _adapters.end(),
+ for_each(adapters.begin(), adapters.end(),
IceUtil::secondVoidMemFun<const string, ObjectAdapterI>(&ObjectAdapter::waitForDeactivate));
{
@@ -114,9 +116,7 @@ IceInternal::ObjectAdapterFactory::destroy()
{
IceUtil::Monitor<IceUtil::RecMutex>::Lock sync(*this);
-
- adapters = _adapters;
- _adapters.clear();
+ adapters.swap(_adapters);
}
//
@@ -168,14 +168,19 @@ IceInternal::ObjectAdapterFactory::createObjectAdapter(const string& name, const
ObjectAdapterPtr
IceInternal::ObjectAdapterFactory::findObjectAdapter(const ObjectPrx& proxy)
{
- IceUtil::Monitor<IceUtil::RecMutex>::Lock sync(*this);
-
- if(!_instance)
+ map<string, ObjectAdapterIPtr> adapters;
{
- return 0;
+ IceUtil::Monitor<IceUtil::RecMutex>::Lock sync(*this);
+
+ if(!_instance)
+ {
+ return 0;
+ }
+
+ adapters = _adapters;
}
- for(map<string, ObjectAdapterIPtr>::iterator p = _adapters.begin(); p != _adapters.end(); ++p)
+ for(map<string, ObjectAdapterIPtr>::iterator p = adapters.begin(); p != adapters.end(); ++p)
{
try
{
@@ -198,7 +203,7 @@ IceInternal::ObjectAdapterFactory::removeObjectAdapter(const string& name)
{
IceUtil::Monitor<IceUtil::RecMutex>::Lock sync(*this);
- if(_waitForShutdown)
+ if(!_instance)
{
return;
}