diff options
Diffstat (limited to 'cpp/src/Ice/ServantManager.cpp')
-rw-r--r-- | cpp/src/Ice/ServantManager.cpp | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/cpp/src/Ice/ServantManager.cpp b/cpp/src/Ice/ServantManager.cpp index 2e1bba0bb0a..0f926568a7e 100644 --- a/cpp/src/Ice/ServantManager.cpp +++ b/cpp/src/Ice/ServantManager.cpp @@ -168,6 +168,33 @@ IceInternal::ServantManager::findServant(const Identity& ident, const string& fa } } +FacetMap +IceInternal::ServantManager::findAllFacets(const Identity& ident) const +{ + IceUtil::Mutex::Lock sync(*this); + + assert(_instance); // Must not be called after destruction. + + ServantMapMap::iterator p = _servantMapMapHint; + + ServantMapMap& servantMapMap = const_cast<ServantMapMap&>(_servantMapMap); + + if(p == servantMapMap.end() || p->first != ident) + { + p = servantMapMap.find(ident); + } + + if(p == servantMapMap.end()) + { + return FacetMap(); + } + else + { + _servantMapMapHint = p; + return p->second; + } +} + bool IceInternal::ServantManager::hasServant(const Identity& ident) const { |