From 325336137d7855e17feb02a56ea3fcd605ddfc33 Mon Sep 17 00:00:00 2001 From: Shauren Date: Wed, 30 Sep 2015 00:31:21 +0200 Subject: Core/Transports: Fixed accessing deleted instance transports Thanks @jackpoz for valgrind log and @pete318 for reproduction steps Closes #15633 (cherry picked from commit 8745e08be020471db886e11a3a7512a751141562) --- src/server/game/Entities/Transport/Transport.cpp | 1 - src/server/game/Maps/Map.cpp | 7 +++++++ 2 files changed, 7 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/server/game/Entities/Transport/Transport.cpp b/src/server/game/Entities/Transport/Transport.cpp index 236675a7d29..144805b88b5 100644 --- a/src/server/game/Entities/Transport/Transport.cpp +++ b/src/server/game/Entities/Transport/Transport.cpp @@ -100,7 +100,6 @@ bool Transport::Create(uint32 guidlow, uint32 entry, uint32 mapid, float x, floa void Transport::CleanupsBeforeDelete(bool finalCleanup /*= true*/) { - HashMapHolder::Remove(this); UnloadStaticPassengers(); while (!_passengers.empty()) { diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 7acafb3c341..2af77ffdec3 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -405,6 +405,13 @@ void Map::DeleteFromWorld(Player* player) delete player; } +template<> +void Map::DeleteFromWorld(Transport* transport) +{ + ObjectAccessor::RemoveObject(transport); + delete transport; +} + void Map::EnsureGridCreated(const GridCoord &p) { std::lock_guard lock(_gridLock); -- cgit v1.2.3