summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src')
-rw-r--r--cpp/src/Ice/Application.cpp4
-rw-r--r--cpp/src/Ice/CommunicatorI.cpp2
-rw-r--r--cpp/src/Ice/ServantFactoryManager.cpp34
3 files changed, 32 insertions, 8 deletions
diff --git a/cpp/src/Ice/Application.cpp b/cpp/src/Ice/Application.cpp
index fdb7ec3d3b6..0df762e3b8d 100644
--- a/cpp/src/Ice/Application.cpp
+++ b/cpp/src/Ice/Application.cpp
@@ -30,7 +30,7 @@ Ice::Application::~Application()
int
Ice::Application::main(int argc, char* argv[], const char* configFile)
{
- if (_communicator && _appName)
+ if (_communicator)
{
cerr << argv[0] << ": only one instance of the Application class can be used" << endl;
return EXIT_FAILURE;
@@ -83,8 +83,6 @@ Ice::Application::main(int argc, char* argv[], const char* configFile)
_communicator = 0;
}
- _appName = 0;
-
return status;
}
diff --git a/cpp/src/Ice/CommunicatorI.cpp b/cpp/src/Ice/CommunicatorI.cpp
index 9ba6b1f2702..8668bdba72b 100644
--- a/cpp/src/Ice/CommunicatorI.cpp
+++ b/cpp/src/Ice/CommunicatorI.cpp
@@ -203,7 +203,7 @@ Ice::CommunicatorI::~CommunicatorI()
{
if (_instance)
{
- _instance->logger()->warning("communicator object has not been destroyed");
+ _instance->logger()->warning("communicator has not been destroyed");
}
}
diff --git a/cpp/src/Ice/ServantFactoryManager.cpp b/cpp/src/Ice/ServantFactoryManager.cpp
index d1f0372f5a6..d777beb1479 100644
--- a/cpp/src/Ice/ServantFactoryManager.cpp
+++ b/cpp/src/Ice/ServantFactoryManager.cpp
@@ -30,8 +30,28 @@ void
IceInternal::ServantFactoryManager::remove(const string& id)
{
JTCSyncT<JTCMutex> sync(*this);
- _factoryMap.erase(id);
- _factoryMapHint = _factoryMap.end();
+
+ map<string, ::Ice::ServantFactoryPtr>::iterator p = _factoryMap.end();
+
+ if (_factoryMapHint != _factoryMap.end())
+ {
+ if (_factoryMapHint->first == id)
+ {
+ p = _factoryMapHint;
+ }
+ }
+
+ if (p != _factoryMap.end())
+ {
+ p = _factoryMap.find(id);
+ }
+
+ if (p != _factoryMap.end())
+ {
+ p->second->destroy();
+ _factoryMap.erase(p);
+ _factoryMapHint = _factoryMap.end();
+ }
}
ServantFactoryPtr
@@ -39,15 +59,21 @@ IceInternal::ServantFactoryManager::find(const string& id)
{
JTCSyncT<JTCMutex> sync(*this);
+ map<string, ::Ice::ServantFactoryPtr>::iterator p = _factoryMap.end();
+
if (_factoryMapHint != _factoryMap.end())
{
if (_factoryMapHint->first == id)
{
- return _factoryMapHint->second;
+ p = _factoryMapHint;
}
}
- map<string, ::Ice::ServantFactoryPtr>::iterator p = _factoryMap.find(id);
+ if (p != _factoryMap.end())
+ {
+ p = _factoryMap.find(id);
+ }
+
if (p != _factoryMap.end())
{
_factoryMapHint = p;