diff options
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/Ice/Application.cpp | 4 | ||||
-rw-r--r-- | cpp/src/Ice/CommunicatorI.cpp | 2 | ||||
-rw-r--r-- | cpp/src/Ice/ServantFactoryManager.cpp | 34 |
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; |