[Orxonox-commit 5876] r10536 - code/branches/core7/src/libraries/core/module
landauf at orxonox.net
landauf at orxonox.net
Sun Jun 7 00:12:20 CEST 2015
Author: landauf
Date: 2015-06-07 00:12:20 +0200 (Sun, 07 Jun 2015)
New Revision: 10536
Modified:
code/branches/core7/src/libraries/core/module/ModuleInstance.cc
code/branches/core7/src/libraries/core/module/StaticInitializationManager.cc
Log:
unload in reversed order
Modified: code/branches/core7/src/libraries/core/module/ModuleInstance.cc
===================================================================
--- code/branches/core7/src/libraries/core/module/ModuleInstance.cc 2015-06-06 21:52:25 UTC (rev 10535)
+++ code/branches/core7/src/libraries/core/module/ModuleInstance.cc 2015-06-06 22:12:20 UTC (rev 10536)
@@ -64,8 +64,9 @@
void ModuleInstance::unloadAllStaticallyInitializedInstances(StaticInitialization::Type type)
{
+ // unload in reversed order
const std::set<StaticallyInitializedInstance*>& instances = this->staticallyInitializedInstancesByType_[type];
- for (std::set<StaticallyInitializedInstance*>::iterator it = instances.begin(); it != instances.end(); ++it)
+ for (std::set<StaticallyInitializedInstance*>::reverse_iterator it = instances.rbegin(); it != instances.rend(); ++it)
(*it)->unload();
}
Modified: code/branches/core7/src/libraries/core/module/StaticInitializationManager.cc
===================================================================
--- code/branches/core7/src/libraries/core/module/StaticInitializationManager.cc 2015-06-06 21:52:25 UTC (rev 10535)
+++ code/branches/core7/src/libraries/core/module/StaticInitializationManager.cc 2015-06-06 22:12:20 UTC (rev 10536)
@@ -50,13 +50,16 @@
void StaticInitializationManager::loadModule(ModuleInstance* module)
{
+ // attention: loading a module may add new handlers to the list
for (std::list<StaticInitializationHandler*>::iterator it = this->handlers_.begin(); it != this->handlers_.end(); ++it)
(*it)->loadModule(module);
}
void StaticInitializationManager::unloadModule(ModuleInstance* module)
{
- for (std::list<StaticInitializationHandler*>::iterator it = this->handlers_.begin(); it != this->handlers_.end(); ++it)
- (*it)->unloadModule(module);
+ // unload in reversed order
+ // attention: unloading a module may remove handlers from the list
+ for (std::list<StaticInitializationHandler*>::reverse_iterator it = this->handlers_.rbegin(); it != this->handlers_.rend(); )
+ (*(it++))->unloadModule(module);
}
}
More information about the Orxonox-commit
mailing list