diff options
author | Michi Henning <michi@zeroc.com> | 2004-05-14 01:42:44 +0000 |
---|---|---|
committer | Michi Henning <michi@zeroc.com> | 2004-05-14 01:42:44 +0000 |
commit | 9cbaead9356f97d6e87a348ba7ef5addc90d27d6 (patch) | |
tree | aba07852229882d7a9cd27cc16aa7afa53ebdc84 /cpp/src/Ice/ServantManager.cpp | |
parent | Changed return value of ice_getFacet() to const string&. (diff) | |
download | ice-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.cpp | 54 |
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); |