diff options
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/Ice/Object.cpp | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/cpp/src/Ice/Object.cpp b/cpp/src/Ice/Object.cpp index a8c63305076..ac923c7485a 100644 --- a/cpp/src/Ice/Object.cpp +++ b/cpp/src/Ice/Object.cpp @@ -299,11 +299,13 @@ Ice::Object::ice_addFacet(const ObjectPtr& facet, const string& name) _activeFacetMapHint = _activeFacetMap.insert(_activeFacetMapHint, make_pair(name, facet)); } -void +ObjectPtr Ice::Object::ice_removeFacet(const string& name) { IceUtil::Mutex::Lock sync(_activeFacetMapMutex); + ObjectPtr result; + map<string, ObjectPtr>::iterator p = _activeFacetMap.end(); if(_activeFacetMapHint != _activeFacetMap.end()) @@ -321,6 +323,8 @@ Ice::Object::ice_removeFacet(const string& name) if(p != _activeFacetMap.end()) { + result = p->second; + if(p == _activeFacetMapHint) { _activeFacetMap.erase(p++); @@ -331,6 +335,8 @@ Ice::Object::ice_removeFacet(const string& name) _activeFacetMap.erase(p); } } + + return result; } void |