Program: bbtk
Module: $RCSfile: bbtkFactory.cxx,v $
Language: C++
- Date: $Date: 2008/10/17 08:18:13 $
- Version: $Revision: 1.40 $
+ Date: $Date: 2009/02/27 11:20:25 $
+ Version: $Revision: 1.41 $
=========================================================================*/
/* ---------------------------------------------------------------------
void Factory::CloseAllPackages()
{
bbtkDebugMessageInc("Kernel",7,"Factory::CloseAllPackages()"<<std::endl);
- while (mPackageMap.begin() != mPackageMap.end())
- {
- PackageMapType::iterator i = mPackageMap.begin();
- ClosePackage(i);
- }
+
+ std::vector< Package::WeakPointer > mAlive;
+ do {
+ mAlive.clear();
+ while (mPackageMap.begin() != mPackageMap.end())
+ {
+ PackageMapType::iterator i = mPackageMap.begin();
+ Package::WeakPointer p = i->second;
+ ClosePackage(i);
+ if (p.lock()) mAlive.push_back(p);
+ }
+ std::vector< Package::WeakPointer >::iterator i;
+ for (i=mAlive.begin();i!=mAlive.end();++i)
+ {
+ // If not dead : reinsert
+ if (i->lock())
+ {
+ bbtkDebugMessage("Kernel",7,"Package "<<i->lock()->GetName()
+ <<" still alive"<<std::endl);
+ // InsertPackage(i->lock());
+ }
+ }
+ }
+ while (mPackageMap.size()>0);
+
bbtkDebugDecTab("Kernel",7);
}
//===================================================================
// remove the entry in the map
mPackageMap.erase(i);
// Release the package if not already destroyed
- if (p.lock()) Package::Release(p);
-
-
+ if (p.lock())
+ {
+ Package::Release(p);
+ }
bbtkDebugDecTab("Kernel",7);
}
//===================================================================