summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src')
-rw-r--r--cpp/src/Ice/ObjectFactoryManager.cpp17
-rw-r--r--cpp/src/Ice/ObjectFactoryManager.h5
-rw-r--r--cpp/src/Ice/ServantManager.cpp20
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)