From b056bc976c15364f81f80cdfb4f545a1e727612a Mon Sep 17 00:00:00 2001 From: jackpoz Date: Thu, 5 Sep 2013 21:10:10 +0200 Subject: Core/Guild: Fix Guild validation crash on start up Partially revert 58ec4e531914121144b6f852e3abf27cbb2f6fc4 and increment GuildStore iterator before validating Guilds. This is required because Guild::Validate() removes the Guild from GuildStore if invalid. Closes #8363 --- src/server/game/Guilds/GuildMgr.cpp | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/server/game/Guilds/GuildMgr.cpp b/src/server/game/Guilds/GuildMgr.cpp index 3fc4e839651..1fcc6ec4e6e 100644 --- a/src/server/game/Guilds/GuildMgr.cpp +++ b/src/server/game/Guilds/GuildMgr.cpp @@ -378,20 +378,13 @@ void GuildMgr::LoadGuilds() TC_LOG_INFO(LOG_FILTER_GUILD, "Validating data of loaded guilds..."); { uint32 oldMSTime = getMSTime(); - std::set rm; // temporary storage to avoid modifying GuildStore with RemoveGuild() while iterating - for (GuildContainer::iterator itr = GuildStore.begin(); itr != GuildStore.end(); ++itr) + for (GuildContainer::iterator itr = GuildStore.begin(); itr != GuildStore.end();) { Guild* guild = itr->second; + ++itr; if (guild && !guild->Validate()) - rm.insert(guild); - } - - for (std::set::iterator itr = rm.begin(); itr != rm.end(); ++itr) - { - Guild* guild = *itr; - RemoveGuild(guild->GetId()); - delete guild; + delete guild; } TC_LOG_INFO(LOG_FILTER_SERVER_LOADING, ">> Validated data of loaded guilds in %u ms", GetMSTimeDiffToNow(oldMSTime)); -- cgit v1.2.3