summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/ServantManager.cpp
diff options
context:
space:
mode:
authorMichi Henning <michi@zeroc.com>2004-05-14 01:42:44 +0000
committerMichi Henning <michi@zeroc.com>2004-05-14 01:42:44 +0000
commit9cbaead9356f97d6e87a348ba7ef5addc90d27d6 (patch)
treeaba07852229882d7a9cd27cc16aa7afa53ebdc84 /cpp/src/Ice/ServantManager.cpp
parentChanged return value of ice_getFacet() to const string&. (diff)
downloadice-9cbaead9356f97d6e87a348ba7ef5addc90d27d6.tar.bz2
ice-9cbaead9356f97d6e87a348ba7ef5addc90d27d6.tar.xz
ice-9cbaead9356f97d6e87a348ba7ef5addc90d27d6.zip
Added removeAllFacets. This is a temporary check-in with trace still in the
code. For some reason, the returned facet map is corrupt. Doing a check-in here so Bernard can try this on his machine.
Diffstat (limited to 'cpp/src/Ice/ServantManager.cpp')
-rw-r--r--cpp/src/Ice/ServantManager.cpp54
1 files changed, 51 insertions, 3 deletions
diff --git a/cpp/src/Ice/ServantManager.cpp b/cpp/src/Ice/ServantManager.cpp
index ee74d53c519..971c20cf046 100644
--- a/cpp/src/Ice/ServantManager.cpp
+++ b/cpp/src/Ice/ServantManager.cpp
@@ -43,7 +43,7 @@ IceInternal::ServantManager::addServant(const ObjectPtr& object, const Identity&
if(p == _servantMapMap.end())
{
- p = _servantMapMap.insert(_servantMapMapHint, pair<const Identity, ServantMap>(ident, ServantMap()));
+ p = _servantMapMap.insert(_servantMapMapHint, pair<const Identity, FacetMap>(ident, FacetMap()));
}
else
{
@@ -73,7 +73,7 @@ IceInternal::ServantManager::removeServant(const Identity& ident, const string&
assert(_instance); // Must not be called after destruction.
ServantMapMap::iterator p = _servantMapMapHint;
- ServantMap::iterator q;
+ FacetMap::iterator q;
if(p == _servantMapMap.end() || p->first != ident)
{
@@ -108,6 +108,54 @@ IceInternal::ServantManager::removeServant(const Identity& ident, const string&
}
}
+FacetMap
+IceInternal::ServantManager::removeAllFacets(const Identity& ident)
+{
+ IceUtil::Mutex::Lock sync(*this);
+
+ assert(_instance); // Must not be called after destruction.
+
+ ServantMapMap::iterator p = _servantMapMapHint;
+
+ if(p == _servantMapMap.end() || p->first != ident)
+ {
+ p = _servantMapMap.find(ident);
+ }
+
+ if(p == _servantMapMap.end())
+ {
+ NotRegisteredException ex(__FILE__, __LINE__);
+ ex.kindOfObject = "servant";
+ ex.id = identityToString(ident);
+ throw ex;
+ }
+
+ cerr << "p->second.size() = " << p->second.size() << endl;
+ //FacetMap result = p->second;
+ FacetMap result;
+ for(FacetMap::const_iterator i = p->second.begin(); i != p->second.end(); ++i)
+ {
+ result.insert(*i);
+ }
+
+ if(p == _servantMapMapHint)
+ {
+ _servantMapMap.erase(p++);
+ _servantMapMapHint = p;
+ }
+ else
+ {
+ _servantMapMap.erase(p);
+ }
+ cerr << "result.size() = " << result.size() << endl;
+ for(FacetMap::const_iterator i = result.begin(); i != result.end(); ++i)
+ {
+ cerr << i->first << endl;
+ }
+
+ return result;
+}
+
ObjectPtr
IceInternal::ServantManager::findServant(const Identity& ident, const string& facet) const
{
@@ -116,7 +164,7 @@ IceInternal::ServantManager::findServant(const Identity& ident, const string& fa
assert(_instance); // Must not be called after destruction.
ServantMapMap::iterator p = _servantMapMapHint;
- ServantMap::iterator q;
+ FacetMap::iterator q;
ServantMapMap& servantMapMap = const_cast<ServantMapMap&>(_servantMapMap);