aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authormegamage <none@none.none>2011-09-27 17:26:13 -0400
committermegamage <none@none.none>2011-09-27 17:26:13 -0400
commiteb946691c709b2e47c360d1ce5e22ab2610bf262 (patch)
tree53da956989c1509c79aae962a1d7e77b3112df43 /src
parent5f043e62910e49df5dd2f251e09ebe77b93411b8 (diff)
Unlink Battleground and BattlegroundMap when one of them is deleted. Fix crash #3239.
Diffstat (limited to 'src')
-rwxr-xr-xsrc/server/game/Battlegrounds/Battleground.cpp5
-rwxr-xr-xsrc/server/game/Maps/Map.cpp6
2 files changed, 11 insertions, 0 deletions
diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp
index a7176e3b550..a5feac09ea4 100755
--- a/src/server/game/Battlegrounds/Battleground.cpp
+++ b/src/server/game/Battlegrounds/Battleground.cpp
@@ -220,7 +220,12 @@ Battleground::~Battleground()
sBattlegroundMgr->RemoveBattleground(GetInstanceID(), GetTypeID());
// unload map
if (m_Map)
+ {
m_Map->SetUnload();
+ //unlink to prevent crash, always unlink all pointer reference before destruction
+ m_Map->SetBG(NULL);
+ m_Map = NULL;
+ }
// remove from bg free slot queue
RemoveFromBGFreeSlotQueue();
diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp
index c076450e98d..c81eb8b61b0 100755
--- a/src/server/game/Maps/Map.cpp
+++ b/src/server/game/Maps/Map.cpp
@@ -2593,6 +2593,12 @@ BattlegroundMap::BattlegroundMap(uint32 id, time_t expiry, uint32 InstanceId, Ma
BattlegroundMap::~BattlegroundMap()
{
+ if(m_bg)
+ {
+ //unlink to prevent crash, always unlink all pointer reference before destruction
+ m_bg->SetBgMap(NULL);
+ m_bg = NULL;
+ }
}
void BattlegroundMap::InitVisibilityDistance()