summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/ServantManager.cpp
diff options
context:
space:
mode:
authorJose <jose@zeroc.com>2009-07-02 19:39:13 +0200
committerJose <jose@zeroc.com>2009-07-02 19:39:13 +0200
commitb288490bceaab7f9c20eb9de62fa7a7ff4f6a917 (patch)
tree8645fb6933ced669886f71f415eb57f676912ebf /cpp/src/Ice/ServantManager.cpp
parentFixed test failure introduce by previous fix (diff)
downloadice-b288490bceaab7f9c20eb9de62fa7a7ff4f6a917.tar.bz2
ice-b288490bceaab7f9c20eb9de62fa7a7ff4f6a917.tar.xz
ice-b288490bceaab7f9c20eb9de62fa7a7ff4f6a917.zip
Bug 2564 - ObjectAdapter::removeServantLocator
Diffstat (limited to 'cpp/src/Ice/ServantManager.cpp')
-rw-r--r--cpp/src/Ice/ServantManager.cpp34
1 files changed, 34 insertions, 0 deletions
diff --git a/cpp/src/Ice/ServantManager.cpp b/cpp/src/Ice/ServantManager.cpp
index 1f6b5622231..4820b979350 100644
--- a/cpp/src/Ice/ServantManager.cpp
+++ b/cpp/src/Ice/ServantManager.cpp
@@ -341,6 +341,40 @@ IceInternal::ServantManager::addServantLocator(const ServantLocatorPtr& locator,
}
ServantLocatorPtr
+IceInternal::ServantManager::removeServantLocator(const string& category)
+{
+ IceUtil::Mutex::Lock sync(*this);
+
+ assert(_instance); // Must not be called after destruction.
+
+ map<string, ServantLocatorPtr>::iterator p = _locatorMap.end();
+ if(_locatorMapHint != p)
+ {
+ if(_locatorMapHint->first == category)
+ {
+ p = _locatorMapHint;
+ }
+ }
+
+ if(p == _locatorMap.end())
+ {
+ p = _locatorMap.find(category);
+ }
+
+ ServantLocatorPtr locator;
+
+ if(p != _locatorMap.end())
+ {
+ locator = p->second;
+ locator->deactivate(p->first);
+ _locatorMap.erase(p);
+ _locatorMapHint = _locatorMap.begin();
+ }
+
+ return locator;
+}
+
+ServantLocatorPtr
IceInternal::ServantManager::findServantLocator(const string& category) const
{
IceUtil::Mutex::Lock sync(*this);