From 929f9f221d912d09afb07ddf80b2d2a59722e479 Mon Sep 17 00:00:00 2001 From: megamage Date: Thu, 4 Dec 2008 16:52:49 -0600 Subject: *Lock notifylist during update. This should fix the crash bug during relocationnotify update. --HG-- branch : trunk --- src/game/Map.cpp | 6 +++++- src/game/Map.h | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/game/Map.cpp b/src/game/Map.cpp index c807c6ab1a1..6c693bfe177 100644 --- a/src/game/Map.cpp +++ b/src/game/Map.cpp @@ -212,6 +212,7 @@ void Map::DeleteStateMachine() Map::Map(uint32 id, time_t expiry, uint32 InstanceId, uint8 SpawnMode) : i_id(id), i_gridExpiry(expiry), i_mapEntry (sMapStore.LookupEntry(id)), i_InstanceId(InstanceId), i_spawnMode(SpawnMode), m_unloadTimer(0) + , i_lock(false) { for(unsigned int idx=0; idx < MAX_NUMBER_OF_GRIDS; ++idx) { @@ -642,6 +643,8 @@ bool Map::loaded(const GridPair &p) const void Map::Update(const uint32 &t_diff) { + //creatures may be added to the list during update + i_lock = true; for(std::vector::iterator iter = i_unitsToNotify.begin(); iter != i_unitsToNotify.end(); ++iter) { Unit *unit = ObjectAccessor::GetObjectInWorld(*iter, (Unit*)NULL); @@ -665,6 +668,7 @@ void Map::Update(const uint32 &t_diff) } } i_unitsToNotify.clear(); + i_lock = false; resetMarkedCells(); @@ -2058,7 +2062,7 @@ void BattleGroundMap::UnloadAll(bool pForce) void Map::AddUnitToNotify(Unit* u) { - if(!u->m_IsInNotifyList) + if(!i_lock && !u->m_IsInNotifyList) { i_unitsToNotify.push_back(u->GetGUID()); u->m_IsInNotifyList = true; diff --git a/src/game/Map.h b/src/game/Map.h index 167a34dcccd..2fb2f4f31e5 100644 --- a/src/game/Map.h +++ b/src/game/Map.h @@ -314,6 +314,7 @@ class TRINITY_DLL_SPEC Map : public GridRefManager, public Trinity::O time_t i_gridExpiry; + bool i_lock; std::set i_activeObjects; std::vector i_unitsToNotify; std::set i_objectsToRemove; -- cgit v1.2.3