diff options
author | Benoit Foucher <benoit@zeroc.com> | 2007-07-04 18:23:08 +0200 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2007-07-04 18:33:11 +0200 |
commit | 58959bf32bfe6bc0801a796a88f10ef242bba62f (patch) | |
tree | 31025032dd456dbc4db164485cbf313e8bb9688d /cpp/src/Ice/ObjectAdapterFactory.cpp | |
parent | Fix repeated relink (see bug 740). (diff) | |
download | ice-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.cpp | 25 |
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; } |