diff options
author | Bernard Normier <bernard@zeroc.com> | 2004-05-20 19:52:04 +0000 |
---|---|---|
committer | Bernard Normier <bernard@zeroc.com> | 2004-05-20 19:52:04 +0000 |
commit | ab6b7d91a0d4f27a9f1a289e7a95f653de03a248 (patch) | |
tree | 27eea95a640587461acd87ef489615e5718a481e /cpp/src/Freeze/EvictorI.cpp | |
parent | Fixed strange Sun CC 5.5 release failure (diff) | |
download | ice-ab6b7d91a0d4f27a9f1a289e7a95f653de03a248.tar.bz2 ice-ab6b7d91a0d4f27a9f1a289e7a95f653de03a248.tar.xz ice-ab6b7d91a0d4f27a9f1a289e7a95f653de03a248.zip |
remove now returns the servant
Diffstat (limited to 'cpp/src/Freeze/EvictorI.cpp')
-rw-r--r-- | cpp/src/Freeze/EvictorI.cpp | 23 |
1 files changed, 11 insertions, 12 deletions
diff --git a/cpp/src/Freeze/EvictorI.cpp b/cpp/src/Freeze/EvictorI.cpp index 913af86a0ae..7ea78e088a2 100644 --- a/cpp/src/Freeze/EvictorI.cpp +++ b/cpp/src/Freeze/EvictorI.cpp @@ -734,20 +734,20 @@ Freeze::EvictorI::createObject(const Identity& ident, const ObjectPtr& servant) } } -void +Ice::ObjectPtr Freeze::EvictorI::remove(const Identity& ident) { - removeFacet(ident, ""); + return removeFacet(ident, ""); } -void +Ice::ObjectPtr Freeze::EvictorI::removeFacet(const Identity& ident, const string& facet) { checkIdentity(ident); DeactivateController::Guard deactivateGuard(_deactivateController); ObjectStore* store = findStore(facet); - bool notThere = (store == 0); + ObjectPtr servant = 0; if(store != 0) { @@ -758,11 +758,7 @@ Freeze::EvictorI::removeFacet(const Identity& ident, const string& facet) // EvictorElementPtr element = store->pin(ident); - if(element == 0) - { - notThere = true; - } - else + if(element != 0) { Lock sync(*this); if(element->stale) @@ -781,6 +777,7 @@ Freeze::EvictorI::removeFacet(const Identity& ident, const string& facet) { case EvictorElement::clean: { + servant = element->rec.servant; element->status = EvictorElement::destroyed; element->rec.servant = 0; addToModifiedQueue(element); @@ -788,12 +785,14 @@ Freeze::EvictorI::removeFacet(const Identity& ident, const string& facet) } case EvictorElement::created: { + servant = element->rec.servant; element->status = EvictorElement::dead; element->rec.servant = 0; break; } case EvictorElement::modified: { + servant = element->rec.servant; element->status = EvictorElement::destroyed; element->rec.servant = 0; // @@ -806,7 +805,6 @@ Freeze::EvictorI::removeFacet(const Identity& ident, const string& facet) case EvictorElement::destroyed: case EvictorElement::dead: { - notThere = true; break; } default: @@ -818,7 +816,7 @@ Freeze::EvictorI::removeFacet(const Identity& ident, const string& facet) } if(element->keepCount > 0) { - assert(notThere == false); + assert(servant != 0); element->keepCount = 0; // @@ -835,7 +833,7 @@ Freeze::EvictorI::removeFacet(const Identity& ident, const string& facet) } } - if(notThere) + if(servant == 0) { NotRegisteredException ex(__FILE__, __LINE__); ex.kindOfObject = "servant"; @@ -856,6 +854,7 @@ Freeze::EvictorI::removeFacet(const Identity& ident, const string& facet) out << " with facet \"" << facet << "\""; } } + return servant; } // |