From 58959bf32bfe6bc0801a796a88f10ef242bba62f Mon Sep 17 00:00:00 2001 From: Benoit Foucher Date: Wed, 4 Jul 2007 18:23:08 +0200 Subject: Fixed bug 2286 --- cpp/src/Ice/ObjectAdapterFactory.cpp | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) (limited to 'cpp/src/Ice/ObjectAdapterFactory.cpp') diff --git a/cpp/src/Ice/ObjectAdapterFactory.cpp b/cpp/src/Ice/ObjectAdapterFactory.cpp index 73fe10723b6..5ec4f2f0fb0 100644 --- a/cpp/src/Ice/ObjectAdapterFactory.cpp +++ b/cpp/src/Ice/ObjectAdapterFactory.cpp @@ -55,6 +55,8 @@ IceInternal::ObjectAdapterFactory::shutdown() void IceInternal::ObjectAdapterFactory::waitForShutdown() { + map adapters; + { IceUtil::Monitor::Lock sync(*this); @@ -80,7 +82,7 @@ IceInternal::ObjectAdapterFactory::waitForShutdown() // // Now we wait for deactivation of each object adapter. // - for_each(_adapters.begin(), _adapters.end(), + for_each(adapters.begin(), adapters.end(), IceUtil::secondVoidMemFun(&ObjectAdapter::waitForDeactivate)); { @@ -114,9 +116,7 @@ IceInternal::ObjectAdapterFactory::destroy() { IceUtil::Monitor::Lock sync(*this); - - adapters = _adapters; - _adapters.clear(); + adapters.swap(_adapters); } // @@ -168,14 +168,19 @@ IceInternal::ObjectAdapterFactory::createObjectAdapter(const string& name, const ObjectAdapterPtr IceInternal::ObjectAdapterFactory::findObjectAdapter(const ObjectPrx& proxy) { - IceUtil::Monitor::Lock sync(*this); - - if(!_instance) + map adapters; { - return 0; + IceUtil::Monitor::Lock sync(*this); + + if(!_instance) + { + return 0; + } + + adapters = _adapters; } - for(map::iterator p = _adapters.begin(); p != _adapters.end(); ++p) + for(map::iterator p = adapters.begin(); p != adapters.end(); ++p) { try { @@ -198,7 +203,7 @@ IceInternal::ObjectAdapterFactory::removeObjectAdapter(const string& name) { IceUtil::Monitor::Lock sync(*this); - if(_waitForShutdown) + if(!_instance) { return; } -- cgit v1.2.3