[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