aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2023-01-15 14:25:18 +0100
committerShauren <shauren.trinity@gmail.com>2023-01-15 14:25:18 +0100
commit3fc3cd455b51d2de4ba5a70b7eff15e23b3da481 (patch)
tree1291c14bb69c9cbf2fbcf73032ee5a42d3cf7ca8
parentbadb55bfd97c16fecfb8cd73ba99e39ecb6b622d (diff)
Core/Battlegrounds: Unload all grids before destroying battleground object
Closes #28755
-rw-r--r--src/server/game/Battlegrounds/Battleground.cpp4
-rw-r--r--src/server/game/Maps/Map.h2
2 files changed, 4 insertions, 2 deletions
diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp
index 5d93ebd8b85..00f03068dc0 100644
--- a/src/server/game/Battlegrounds/Battleground.cpp
+++ b/src/server/game/Battlegrounds/Battleground.cpp
@@ -134,7 +134,9 @@ Battleground::~Battleground()
// unload map
if (m_Map)
{
- m_Map->SetUnload();
+ m_Map->UnloadAll(); // unload all objects (they may hold a reference to bg in their ZoneScript pointer)
+ m_Map->SetUnload(); // mark for deletion by MapManager
+
//unlink to prevent crash, always unlink all pointer reference before destruction
m_Map->SetBG(nullptr);
m_Map = nullptr;
diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h
index da4aa7ced8e..e0fcfabd056 100644
--- a/src/server/game/Maps/Map.h
+++ b/src/server/game/Maps/Map.h
@@ -244,7 +244,7 @@ class TC_GAME_API Map : public GridRefManager<NGridType>
bool UnloadGrid(NGridType& ngrid, bool pForce);
void GridMarkNoUnload(uint32 x, uint32 y);
void GridUnmarkNoUnload(uint32 x, uint32 y);
- virtual void UnloadAll();
+ void UnloadAll();
void ResetGridExpiry(NGridType &grid, float factor = 1) const
{