diff options
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/Freeze/EvictorI.cpp | 20 | ||||
-rw-r--r-- | cpp/src/Freeze/EvictorI.h | 1 |
2 files changed, 21 insertions, 0 deletions
diff --git a/cpp/src/Freeze/EvictorI.cpp b/cpp/src/Freeze/EvictorI.cpp index 333ea527611..d91b0c9e439 100644 --- a/cpp/src/Freeze/EvictorI.cpp +++ b/cpp/src/Freeze/EvictorI.cpp @@ -178,9 +178,29 @@ Freeze::EvictorI::installServantInitializer(const ServantInitializerPtr& initial EvictorIteratorPtr Freeze::EvictorI::getIterator() { + IceUtil::Mutex::Lock sync(*this); + + if (_deactivated) + { + throw EvictorDeactivatedException(__FILE__, __LINE__); + } + return new EvictorIteratorI(_dict.begin(), _dict.end()); } +bool +Freeze::EvictorI::hasObject(const Ice::Identity& ident) +{ + IceUtil::Mutex::Lock sync(*this); + + if (_deactivated) + { + throw EvictorDeactivatedException(__FILE__, __LINE__); + } + + return _dict.find(ident) != _dict.end(); +} + ObjectPtr Freeze::EvictorI::locate(const ObjectAdapterPtr& adapter, const Current& current, LocalObjectPtr& cookie) { diff --git a/cpp/src/Freeze/EvictorI.h b/cpp/src/Freeze/EvictorI.h index c71e1ff7e3c..5c7a7304b2f 100644 --- a/cpp/src/Freeze/EvictorI.h +++ b/cpp/src/Freeze/EvictorI.h @@ -38,6 +38,7 @@ public: virtual void installServantInitializer(const ServantInitializerPtr&); virtual EvictorIteratorPtr getIterator(); + virtual bool hasObject(const Ice::Identity&); virtual Ice::ObjectPtr locate(const Ice::ObjectAdapterPtr&, const Ice::Current&, Ice::LocalObjectPtr&); virtual void finished(const Ice::ObjectAdapterPtr&, const Ice::Current&, |