diff options
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/Ice/ObjectAdapterFactory.cpp | 25 | ||||
-rw-r--r-- | cpp/src/Ice/ObjectAdapterI.cpp | 9 |
2 files changed, 23 insertions, 11 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; } diff --git a/cpp/src/Ice/ObjectAdapterI.cpp b/cpp/src/Ice/ObjectAdapterI.cpp index b02cf0a9ef5..3de824796c8 100644 --- a/cpp/src/Ice/ObjectAdapterI.cpp +++ b/cpp/src/Ice/ObjectAdapterI.cpp @@ -643,7 +643,14 @@ Ice::ObjectAdapterI::isLocal(const ObjectPrx& proxy) const if(info) { bool isCached; - endpoints = info->getEndpoints(ir, ir->getLocatorCacheTimeout(), isCached); + try + { + endpoints = info->getEndpoints(ir, ir->getLocatorCacheTimeout(), isCached); + } + catch(const Ice::LocalException&) + { + return false; + } } else { |