summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/ObjectAdapterFactory.cpp
diff options
context:
space:
mode:
authorDwayne Boone <dwayne@zeroc.com>2007-01-05 18:50:12 +0000
committerDwayne Boone <dwayne@zeroc.com>2007-01-05 18:50:12 +0000
commit738623799efdaab619e744919fb7c3821ded703c (patch)
tree8e9a20c99c07f6cab855b1ff246101dfdc4dfc28 /cpp/src/Ice/ObjectAdapterFactory.cpp
parentAdded ObjectAdapter::destroy (diff)
downloadice-738623799efdaab619e744919fb7c3821ded703c.tar.bz2
ice-738623799efdaab619e744919fb7c3821ded703c.tar.xz
ice-738623799efdaab619e744919fb7c3821ded703c.zip
Added ObejctAdapter::destroy
Diffstat (limited to 'cpp/src/Ice/ObjectAdapterFactory.cpp')
-rw-r--r--cpp/src/Ice/ObjectAdapterFactory.cpp29
1 files changed, 24 insertions, 5 deletions
diff --git a/cpp/src/Ice/ObjectAdapterFactory.cpp b/cpp/src/Ice/ObjectAdapterFactory.cpp
index 03ca3d518c5..bbd67ffd6eb 100644
--- a/cpp/src/Ice/ObjectAdapterFactory.cpp
+++ b/cpp/src/Ice/ObjectAdapterFactory.cpp
@@ -84,11 +84,6 @@ IceInternal::ObjectAdapterFactory::waitForShutdown()
for_each(_adapters.begin(), _adapters.end(),
IceUtil::secondVoidMemFun<const string, ObjectAdapterI>(&ObjectAdapter::waitForDeactivate));
- //
- // We're done, now we can throw away the object adapters.
- //
- _adapters.clear();
-
{
IceUtil::Monitor<IceUtil::RecMutex>::Lock sync(*this);
@@ -100,6 +95,30 @@ IceInternal::ObjectAdapterFactory::waitForShutdown()
}
}
+void
+IceInternal::ObjectAdapterFactory::destroy()
+{
+ //
+ // First wait for shutdown to finish.
+ //
+ waitForShutdown();
+
+ map<string, ObjectAdapterIPtr> adapters;
+
+ {
+ IceUtil::Monitor<IceUtil::RecMutex>::Lock sync(*this);
+
+ adapters = _adapters;
+ _adapters.clear();
+ }
+
+ //
+ // Now we destroy each object adapter.
+ //
+ for_each(adapters.begin(), adapters.end(),
+ IceUtil::secondVoidMemFun<const string, ObjectAdapterI>(&ObjectAdapter::destroy));
+}
+
ObjectAdapterPtr
IceInternal::ObjectAdapterFactory::createObjectAdapter(const string& name, const string& endpoints,
const RouterPrx& router)