diff options
author | Marc Laukien <marc@zeroc.com> | 2004-04-09 17:00:52 +0000 |
---|---|---|
committer | Marc Laukien <marc@zeroc.com> | 2004-04-09 17:00:52 +0000 |
commit | d0882b6da4887c83e51867dfa8c2f5e9543f0a5d (patch) | |
tree | c00edd9461071159c5c829de3ae9ce993125f212 /cpp/src/Ice/ServantManager.cpp | |
parent | moved StringUtil to IceUtil, fixed names (diff) | |
download | ice-d0882b6da4887c83e51867dfa8c2f5e9543f0a5d.tar.bz2 ice-d0882b6da4887c83e51867dfa8c2f5e9543f0a5d.tar.xz ice-d0882b6da4887c83e51867dfa8c2f5e9543f0a5d.zip |
fix
Diffstat (limited to 'cpp/src/Ice/ServantManager.cpp')
-rw-r--r-- | cpp/src/Ice/ServantManager.cpp | 20 |
1 files changed, 12 insertions, 8 deletions
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) |