diff options
Diffstat (limited to 'cppe/src/IceE/ObjectAdapterFactory.cpp')
-rw-r--r-- | cppe/src/IceE/ObjectAdapterFactory.cpp | 41 |
1 files changed, 34 insertions, 7 deletions
diff --git a/cppe/src/IceE/ObjectAdapterFactory.cpp b/cppe/src/IceE/ObjectAdapterFactory.cpp index 6cc8fe9209f..20f12bb0906 100644 --- a/cppe/src/IceE/ObjectAdapterFactory.cpp +++ b/cppe/src/IceE/ObjectAdapterFactory.cpp @@ -85,18 +85,11 @@ IceInternal::ObjectAdapterFactory::waitForShutdown() // // Now we wait for deactivation of each object adapter. // - //for_each(_adapters.begin(), _adapters.end(), - //Ice::secondVoidMemFun<const string, ObjectAdapter>(&ObjectAdapter::waitForDeactivate)); for(map<string, ObjectAdapterPtr>::const_iterator p = _adapters.begin(); p != _adapters.end(); ++p) { p->second->waitForDeactivate(); } - // - // We're done, now we can throw away the object adapters. - // - _adapters.clear(); - { IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); @@ -108,6 +101,40 @@ IceInternal::ObjectAdapterFactory::waitForShutdown() } } +bool +IceInternal::ObjectAdapterFactory::isShutdown() const +{ + IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); + + return _instance == 0; +} + +void +IceInternal::ObjectAdapterFactory::destroy() +{ + // + // First wait for shutdown to finish. + // + waitForShutdown(); + + map<string, ObjectAdapterPtr> adapters; + + { + IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); + + adapters = _adapters; + _adapters.clear(); + } + + // + // Now we destroy each object adapter. + // + for(map<string, ObjectAdapterPtr>::const_iterator p = adapters.begin(); p != adapters.end(); ++p) + { + p->second->destroy(); + } +} + ObjectAdapterPtr IceInternal::ObjectAdapterFactory::createObjectAdapter(const string& name, const string& endpoints #ifdef ICEE_HAS_ROUTER |