Erase-remove idiom in Island and Bimap to avoid invalid iterators (Nils Mangelsen)

This commit is contained in:
quemy 2013-02-07 22:48:41 +01:00
commit d41cbbe781
3 changed files with 13 additions and 12 deletions

View file

@ -116,14 +116,14 @@ void paradiseo::smp::Island<EOAlgo,EOT,bEOT>::send(eoSelect<EOT>& _select)
eoPop<bEOT> baseMigPop;
for(auto& indi : migPop)
baseMigPop.push_back(std::move(convertToBase(indi)));
//std::cout << "On envoie de l'île : " << migPop << std::endl;
// Delete delivered messages
for(auto it = sentMessages.begin(); it != sentMessages.end(); it++)
if(!it->joinable())
sentMessages.erase(it);
sentMessages.erase(std::remove_if(sentMessages.begin(), sentMessages.end(),
[&](std::thread& i) -> bool
{ return !i.joinable(); }
),
sentMessages.end());
sentMessages.push_back(std::thread(&IslandModel<bEOT>::update, model, std::move(baseMigPop), this));
}
}