diff options
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/Ice/ObjectFactoryManager.cpp | 17 | ||||
-rw-r--r-- | cpp/src/Ice/ObjectFactoryManager.h | 5 | ||||
-rw-r--r-- | cpp/src/Ice/ServantManager.cpp | 20 |
3 files changed, 21 insertions, 21 deletions
diff --git a/cpp/src/Ice/ObjectFactoryManager.cpp b/cpp/src/Ice/ObjectFactoryManager.cpp index 75b6381d96d..e9fb54c2293 100644 --- a/cpp/src/Ice/ObjectFactoryManager.cpp +++ b/cpp/src/Ice/ObjectFactoryManager.cpp @@ -21,8 +21,6 @@ using namespace std; using namespace Ice; using namespace IceInternal; -const char * const IceInternal::ObjectFactoryManager::_kindOfObject = "object factory"; - void IceInternal::incRef(ObjectFactoryManager* p) { p->__incRef(); } void IceInternal::decRef(ObjectFactoryManager* p) { p->__decRef(); } @@ -35,7 +33,7 @@ IceInternal::ObjectFactoryManager::add(const ObjectFactoryPtr& factory, const st || _factoryMap.find(id) != _factoryMap.end()) { AlreadyRegisteredException ex(__FILE__, __LINE__); - ex.kindOfObject = _kindOfObject; + ex.kindOfObject = "object factory"; ex.id = id; throw ex; } @@ -48,8 +46,7 @@ IceInternal::ObjectFactoryManager::remove(const string& id) { IceUtil::Mutex::Lock sync(*this); - map<string, ::Ice::ObjectFactoryPtr>::iterator p = _factoryMap.end(); - + map<string, ObjectFactoryPtr>::iterator p = _factoryMap.end(); if(_factoryMapHint != _factoryMap.end()) { if(_factoryMapHint->first == id) @@ -64,7 +61,7 @@ IceInternal::ObjectFactoryManager::remove(const string& id) if(p == _factoryMap.end()) { NotRegisteredException ex(__FILE__, __LINE__); - ex.kindOfObject = _kindOfObject; + ex.kindOfObject = "object factory"; ex.id = id; throw ex; } @@ -85,12 +82,11 @@ IceInternal::ObjectFactoryManager::remove(const string& id) } ObjectFactoryPtr -IceInternal::ObjectFactoryManager::find(const string& id) +IceInternal::ObjectFactoryManager::find(const string& id) const { IceUtil::Mutex::Lock sync(*this); - map<string, ::Ice::ObjectFactoryPtr>::iterator p = _factoryMap.end(); - + map<string, ObjectFactoryPtr>::iterator p = const_cast<map<string, ObjectFactoryPtr>&>(_factoryMap).end(); if(_factoryMapHint != _factoryMap.end()) { if(_factoryMapHint->first == id) @@ -101,7 +97,7 @@ IceInternal::ObjectFactoryManager::find(const string& id) if(p == _factoryMap.end()) { - p = _factoryMap.find(id); + p = const_cast<map<string, ObjectFactoryPtr>&>(_factoryMap).find(id); } if(p != _factoryMap.end()) @@ -124,6 +120,7 @@ void IceInternal::ObjectFactoryManager::destroy() { IceUtil::Mutex::Lock sync(*this); + for_each(_factoryMap.begin(), _factoryMap.end(), Ice::secondVoidMemFun<const string, ObjectFactory>(&ObjectFactory::destroy)); _factoryMap.clear(); diff --git a/cpp/src/Ice/ObjectFactoryManager.h b/cpp/src/Ice/ObjectFactoryManager.h index 114966d9079..654573b29e5 100644 --- a/cpp/src/Ice/ObjectFactoryManager.h +++ b/cpp/src/Ice/ObjectFactoryManager.h @@ -29,7 +29,7 @@ public: void add(const ::Ice::ObjectFactoryPtr&, const std::string&); void remove(const std::string&); - ::Ice::ObjectFactoryPtr find(const std::string&); + ::Ice::ObjectFactoryPtr find(const std::string&) const; private: @@ -38,8 +38,7 @@ private: friend class Instance; std::map<std::string, ::Ice::ObjectFactoryPtr> _factoryMap; - std::map<std::string, ::Ice::ObjectFactoryPtr>::iterator _factoryMapHint; - static const char * const _kindOfObject; + mutable std::map<std::string, ::Ice::ObjectFactoryPtr>::iterator _factoryMapHint; }; } diff --git a/cpp/src/Ice/ServantManager.cpp b/cpp/src/Ice/ServantManager.cpp index 2a220100c05..fe6d59de0d9 100644 --- a/cpp/src/Ice/ServantManager.cpp +++ b/cpp/src/Ice/ServantManager.cpp @@ -167,11 +167,12 @@ IceInternal::ServantManager::addServantLocator(const ServantLocatorPtr& locator, assert(_instance); // Must not be called after destruction. - if(_locatorMap.find(category) != _locatorMap.end()) + if((_locatorMapHint != _locatorMap.end() && _locatorMapHint->first == category) + || _locatorMap.find(category) != _locatorMap.end()) { AlreadyRegisteredException ex(__FILE__, __LINE__); ex.kindOfObject = "servant locator"; - ex.id = category; + ex.id = IceUtil::escapeString(category, ""); throw ex; } @@ -185,17 +186,21 @@ IceInternal::ServantManager::findServantLocator(const string& category) const assert(_instance); // Must not be called after destruction. - if(_locatorMap.end() != _locatorMapHint) + map<string, ServantLocatorPtr>::iterator p = const_cast<map<string, ServantLocatorPtr>&>(_locatorMap).end(); + if(_locatorMapHint != _locatorMap.end()) { if(_locatorMapHint->first == category) { - return _locatorMapHint->second; + p = _locatorMapHint; } } - map<string, ServantLocatorPtr>::iterator p = - const_cast<map<string, ServantLocatorPtr>&>(_locatorMap).find(category); - if(_locatorMap.end() != p) + if(p == _locatorMap.end()) + { + p = const_cast<map<string, ServantLocatorPtr>&>(_locatorMap).find(category); + } + + if(p != _locatorMap.end()) { _locatorMapHint = p; return p->second; @@ -204,7 +209,6 @@ IceInternal::ServantManager::findServantLocator(const string& category) const { return 0; } - } IceInternal::ServantManager::ServantManager(const InstancePtr& instance, const string& adapterName) |