summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/Object.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/Ice/Object.cpp')
-rw-r--r--cpp/src/Ice/Object.cpp8
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