diff options
author | Michi Henning <michi@zeroc.com> | 2002-12-05 06:31:16 +0000 |
---|---|---|
committer | Michi Henning <michi@zeroc.com> | 2002-12-05 06:31:16 +0000 |
commit | 3bd386f9497ca18c74ff4e505922d52a16bf5779 (patch) | |
tree | e89b92fe5c5253ca4d37cb58b6cc0f5816abd3fb /cpp/src/Ice/UserExceptionFactoryManager.cpp | |
parent | yet another fix for Incoming cache (diff) | |
download | ice-3bd386f9497ca18c74ff4e505922d52a16bf5779.tar.bz2 ice-3bd386f9497ca18c74ff4e505922d52a16bf5779.tar.xz ice-3bd386f9497ca18c74ff4e505922d52a16bf5779.zip |
Added AlreadyRegisteredException and NotRegisteredException. Removed
PluginExistsException, PluginNotFoundException,
ObjectAdapterNotRegisteredException, and ObjectAdapterIdInUseException.
Updated test suite for new exceptions and did a make depend.
Diffstat (limited to 'cpp/src/Ice/UserExceptionFactoryManager.cpp')
-rw-r--r-- | cpp/src/Ice/UserExceptionFactoryManager.cpp | 40 |
1 files changed, 28 insertions, 12 deletions
diff --git a/cpp/src/Ice/UserExceptionFactoryManager.cpp b/cpp/src/Ice/UserExceptionFactoryManager.cpp index 6d93cac36f6..3d276698c8f 100644 --- a/cpp/src/Ice/UserExceptionFactoryManager.cpp +++ b/cpp/src/Ice/UserExceptionFactoryManager.cpp @@ -15,6 +15,7 @@ #include <Ice/UserExceptionFactoryManager.h> #include <Ice/UserExceptionFactory.h> #include <Ice/Functional.h> +#include <Ice/LocalException.h> using namespace std; using namespace Ice; @@ -27,6 +28,16 @@ void IceInternal::UserExceptionFactoryManager::add(const UserExceptionFactoryPtr& factory, const string& id) { IceUtil::Mutex::Lock sync(*this); + + if( (_factoryMapHint != _factoryMap.end() && _factoryMapHint->first == id) + || _factoryMap.find(id) != _factoryMap.end()) + { + AlreadyRegisteredException ex(__FILE__, __LINE__); + ex.kindOfObject = _kindOfObject; + ex.id = id; + throw ex; + } + _factoryMapHint = _factoryMap.insert(_factoryMapHint, make_pair(id, factory)); } @@ -48,21 +59,26 @@ IceInternal::UserExceptionFactoryManager::remove(const string& id) if(p == _factoryMap.end()) { p = _factoryMap.find(id); + if(p == _factoryMap.end()) + { + NotRegisteredException ex(__FILE__, __LINE__); + ex.kindOfObject = _kindOfObject; + ex.id = id; + throw ex; + } } + assert(p != _factoryMap.end()); - if(p != _factoryMap.end()) - { - p->second->destroy(); + p->second->destroy(); - if(p == _factoryMapHint) - { - _factoryMap.erase(p++); - _factoryMapHint = p; - } - else - { - _factoryMap.erase(p); - } + if(p == _factoryMapHint) + { + _factoryMap.erase(p); + _factoryMapHint = ++p; + } + else + { + _factoryMap.erase(p); } } |