aboutsummaryrefslogtreecommitdiff
path: root/src/server/game
diff options
context:
space:
mode:
authorjackpoz <giacomopoz@gmail.com>2015-07-19 23:04:04 +0200
committerjackpoz <giacomopoz@gmail.com>2015-07-20 20:52:36 +0200
commitaa042e94c2f76e5735a8f745c3fcb7dd54cf6c0b (patch)
treebce38c07fb3b2659a5ccf12d150e50181d66ed58 /src/server/game
parent3c4484d782ace3e3662840dfa2574f334c0e8e9a (diff)
Core/Collision: Fix race conditions in mmaps
Fix a race condition in MMapManager happening whenever a map was unloaded. GridUnload enabled was required to trigger the race condition.
Diffstat (limited to 'src/server/game')
-rw-r--r--src/server/game/World/World.cpp15
1 files changed, 8 insertions, 7 deletions
diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp
index ab109d8dc2f..fc79f351a54 100644
--- a/src/server/game/World/World.cpp
+++ b/src/server/game/World/World.cpp
@@ -1375,15 +1375,16 @@ void World::SetInitialWorldSettings()
LoadDBCStores(m_dataPath);
DetectDBCLang();
- if (VMAP::VMapManager2* vmmgr2 = dynamic_cast<VMAP::VMapManager2*>(VMAP::VMapFactory::createOrGetVMapManager()))
- {
- std::vector<uint32> mapIds;
- for (uint32 mapId = 0; mapId < sMapStore.GetNumRows(); mapId++)
- if (sMapStore.LookupEntry(mapId))
- mapIds.push_back(mapId);
+ std::vector<uint32> mapIds;
+ for (uint32 mapId = 0; mapId < sMapStore.GetNumRows(); mapId++)
+ if (sMapStore.LookupEntry(mapId))
+ mapIds.push_back(mapId);
+ if (VMAP::VMapManager2* vmmgr2 = dynamic_cast<VMAP::VMapManager2*>(VMAP::VMapFactory::createOrGetVMapManager()))
vmmgr2->InitializeThreadUnsafe(mapIds);
- }
+
+ MMAP::MMapManager* mmmgr = MMAP::MMapFactory::createOrGetMMapManager();
+ mmmgr->InitializeThreadUnsafe(mapIds);
TC_LOG_INFO("server.loading", "Loading SpellInfo store...");
sSpellMgr->LoadSpellInfoStore();