diff options
Diffstat (limited to 'cpp')
-rw-r--r-- | cpp/src/Ice/ServantManager.cpp | 54 | ||||
-rw-r--r-- | cpp/test/Ice/servantLocator/Collocated.cpp | 6 | ||||
-rw-r--r-- | cpp/test/Ice/servantLocator/Server.cpp | 6 | ||||
-rw-r--r-- | cpp/test/Ice/servantLocator/ServerAMD.cpp | 6 |
4 files changed, 39 insertions, 33 deletions
diff --git a/cpp/src/Ice/ServantManager.cpp b/cpp/src/Ice/ServantManager.cpp index 4820b979350..d48173717df 100644 --- a/cpp/src/Ice/ServantManager.cpp +++ b/cpp/src/Ice/ServantManager.cpp @@ -366,7 +366,6 @@ IceInternal::ServantManager::removeServantLocator(const string& category) if(p != _locatorMap.end()) { locator = p->second; - locator->deactivate(p->first); _locatorMap.erase(p); _locatorMapHint = _locatorMap.begin(); } @@ -438,45 +437,46 @@ IceInternal::ServantManager::destroy() { ServantMapMap servantMapMap; map<string, ServantLocatorPtr> locatorMap; + Ice::LoggerPtr logger; { IceUtil::Mutex::Lock sync(*this); assert(_instance); // Must not be called after destruction. + logger = _instance->initializationData().logger; servantMapMap.swap(_servantMapMap); _servantMapMapHint = _servantMapMap.end(); - for(map<string, ServantLocatorPtr>::const_iterator p = _locatorMap.begin(); p != _locatorMap.end(); ++p) + locatorMap.swap(_locatorMap); + _locatorMapHint = _locatorMap.end(); + _instance = 0; + } + + for(map<string, ServantLocatorPtr>::const_iterator p = locatorMap.begin(); p != locatorMap.end(); ++p) + { + try { - try - { - p->second->deactivate(p->first); - } - catch(const Exception& ex) - { - Error out(_instance->initializationData().logger); - out << "exception during locator deactivation:\n" - << "object adapter: `" << _adapterName << "'\n" - << "locator category: `" << p->first << "'\n" - << ex; + p->second->deactivate(p->first); + } + catch(const Exception& ex) + { + Error out(logger); + out << "exception during locator deactivation:\n" + << "object adapter: `" << _adapterName << "'\n" + << "locator category: `" << p->first << "'\n" + << ex; #ifdef __GNUC__ - out << "\n" << ex.ice_stackTrace(); + out << "\n" << ex.ice_stackTrace(); #endif - } - catch(...) - { - Error out(_instance->initializationData().logger); - out << "unknown exception during locator deactivation:\n" - << "object adapter: `" << _adapterName << "'\n" - << "locator category: `" << p->first << "'"; - } } - - locatorMap.swap(_locatorMap); - _locatorMapHint = _locatorMap.end(); - - _instance = 0; + catch(...) + { + Error out(logger); + out << "unknown exception during locator deactivation:\n" + << "object adapter: `" << _adapterName << "'\n" + << "locator category: `" << p->first << "'"; + } } // diff --git a/cpp/test/Ice/servantLocator/Collocated.cpp b/cpp/test/Ice/servantLocator/Collocated.cpp index 777030c17f5..27548455745 100644 --- a/cpp/test/Ice/servantLocator/Collocated.cpp +++ b/cpp/test/Ice/servantLocator/Collocated.cpp @@ -61,8 +61,10 @@ public: } else { - current.adapter->removeServantLocator(""); - current.adapter->removeServantLocator("category"); + ServantLocatorPtr locator = current.adapter->removeServantLocator(""); + locator->deactivate(""); + locator = current.adapter->removeServantLocator("category"); + locator->deactivate("category"); } } }; diff --git a/cpp/test/Ice/servantLocator/Server.cpp b/cpp/test/Ice/servantLocator/Server.cpp index 3fd46e6af54..3aeec31ef5f 100644 --- a/cpp/test/Ice/servantLocator/Server.cpp +++ b/cpp/test/Ice/servantLocator/Server.cpp @@ -60,8 +60,10 @@ public: } else { - current.adapter->removeServantLocator(""); - current.adapter->removeServantLocator("category"); + ServantLocatorPtr locator = current.adapter->removeServantLocator(""); + locator->deactivate(""); + locator = current.adapter->removeServantLocator("category"); + locator->deactivate("category"); } } }; diff --git a/cpp/test/Ice/servantLocator/ServerAMD.cpp b/cpp/test/Ice/servantLocator/ServerAMD.cpp index 0f7a8788896..bcbbfc94fed 100644 --- a/cpp/test/Ice/servantLocator/ServerAMD.cpp +++ b/cpp/test/Ice/servantLocator/ServerAMD.cpp @@ -60,8 +60,10 @@ public: } else { - current.adapter->removeServantLocator(""); - current.adapter->removeServantLocator("category"); + ServantLocatorPtr locator = current.adapter->removeServantLocator(""); + locator->deactivate(""); + locator = current.adapter->removeServantLocator("category"); + locator->deactivate("category"); } } }; |