summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/ObjectAdapterI.cpp
diff options
context:
space:
mode:
authorMarc Laukien <marc@zeroc.com>2001-10-14 17:58:55 +0000
committerMarc Laukien <marc@zeroc.com>2001-10-14 17:58:55 +0000
commit5c872d29b6223e23daea5b510a2bcb4d43fa08eb (patch)
treee4e7f5a7f43a76c7cee0a52626b2a1c294763bb9 /cpp/src/Ice/ObjectAdapterI.cpp
parentfixes (diff)
downloadice-5c872d29b6223e23daea5b510a2bcb4d43fa08eb.tar.bz2
ice-5c872d29b6223e23daea5b510a2bcb4d43fa08eb.tar.xz
ice-5c872d29b6223e23daea5b510a2bcb4d43fa08eb.zip
user exceptin factories
Diffstat (limited to 'cpp/src/Ice/ObjectAdapterI.cpp')
-rw-r--r--cpp/src/Ice/ObjectAdapterI.cpp38
1 files changed, 34 insertions, 4 deletions
diff --git a/cpp/src/Ice/ObjectAdapterI.cpp b/cpp/src/Ice/ObjectAdapterI.cpp
index 7a1ab8f0ad5..13439849428 100644
--- a/cpp/src/Ice/ObjectAdapterI.cpp
+++ b/cpp/src/Ice/ObjectAdapterI.cpp
@@ -173,8 +173,27 @@ Ice::ObjectAdapterI::removeServantLocator(const string& prefix)
throw ObjectAdapterDeactivatedException(__FILE__, __LINE__);
}
- _locatorMap.erase(prefix);
- _locatorMapHint = _locatorMap.end();
+ map<string, ::Ice::ServantLocatorPtr>::iterator p = _locatorMap.end();
+
+ if (_locatorMapHint != _locatorMap.end())
+ {
+ if (_locatorMapHint->first == prefix)
+ {
+ p = _locatorMapHint;
+ }
+ }
+
+ if (p == _locatorMap.end())
+ {
+ p = _locatorMap.find(prefix);
+ }
+
+ if (p != _locatorMap.end())
+ {
+ p->second->deactivate();
+ _locatorMap.erase(p);
+ _locatorMapHint = _locatorMap.end();
+ }
}
ServantLocatorPtr
@@ -182,15 +201,26 @@ Ice::ObjectAdapterI::findServantLocator(const string& prefix)
{
JTCSyncT<JTCMutex> sync(*this);
+ if (_collectorFactories.empty())
+ {
+ throw ObjectAdapterDeactivatedException(__FILE__, __LINE__);
+ }
+
+ map<string, ::Ice::ServantLocatorPtr>::iterator p = _locatorMap.end();
+
if (_locatorMapHint != _locatorMap.end())
{
if (_locatorMapHint->first == prefix)
{
- return _locatorMapHint->second;
+ p = _locatorMapHint;
}
}
- map<string, ::Ice::ServantLocatorPtr>::iterator p = _locatorMap.find(prefix);
+ if (p == _locatorMap.end())
+ {
+ p = _locatorMap.find(prefix);
+ }
+
if (p != _locatorMap.end())
{
_locatorMapHint = p;