diff options
Diffstat (limited to 'cpp/src/Ice/Object.cpp')
-rw-r--r-- | cpp/src/Ice/Object.cpp | 58 |
1 files changed, 23 insertions, 35 deletions
diff --git a/cpp/src/Ice/Object.cpp b/cpp/src/Ice/Object.cpp index 7bad13a59da..c64a503760a 100644 --- a/cpp/src/Ice/Object.cpp +++ b/cpp/src/Ice/Object.cpp @@ -343,37 +343,6 @@ Ice::Object::ice_removeAllFacets() } ObjectPtr -Ice::Object::ice_findFacet(const string& name) -{ - IceUtil::Mutex::Lock sync(_activeFacetMapMutex); - - map<string, ObjectPtr>::iterator p = _activeFacetMap.end(); - - if(_activeFacetMapHint != _activeFacetMap.end()) - { - if(_activeFacetMapHint->first == name) - { - p = _activeFacetMapHint; - } - } - - if(p == _activeFacetMap.end()) - { - p = _activeFacetMap.find(name); - } - - if(p != _activeFacetMap.end()) - { - _activeFacetMapHint = p; - return p->second; - } - else - { - return 0; - } -} - -ObjectPtr Ice::Object::ice_findFacet(const vector<string>& path, int start) { int sz = path.size(); @@ -388,13 +357,32 @@ Ice::Object::ice_findFacet(const vector<string>& path, int start) return this; } - ObjectPtr facet = ice_findFacet(path[start]); - if(!facet) { - return 0; + IceUtil::Mutex::Lock sync(_activeFacetMapMutex); + + map<string, ObjectPtr>::iterator p = _activeFacetMap.end(); + + if(_activeFacetMapHint != _activeFacetMap.end()) + { + if(_activeFacetMapHint->first == path[start]) + { + p = _activeFacetMapHint; + } + } + + if(p == _activeFacetMap.end()) + { + p = _activeFacetMap.find(path[start]); + } + + if(p != _activeFacetMap.end()) + { + _activeFacetMapHint = p; + return p->second->ice_findFacet(path, start + 1); + } } - return facet->ice_findFacet(path, start + 1); + return 0; } DispatchStatus |