void ModuleManager::updateModules( ModuleState state ) { size_t numModules = _modules.size(); std::vector<IModule*> sortedModules; sortedModules.reserve( numModules ); for( size_t i = 0; i < numModules; ++i ) sortedModules.push_back( _modules[i].get() ); std::sort( sortedModules.begin(), sortedModules.end(), sortByIncreasingRank ); for( size_t i = 0; i < numModules; ++i ) { IModule* module = sortedModules[i]; try { updateModule( module, state ); } catch( std::exception& e ) { module->abort(); CORAL_LOG(WARNING) << "Module '" << module->getNamespace()->getFullName() << "' aborted due to exception: " << e.what(); } } }