diff options
| author | Shauren <shauren.trinity@gmail.com> | 2015-09-30 00:31:21 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2015-09-30 00:31:21 +0200 |
| commit | 8745e08be020471db886e11a3a7512a751141562 (patch) | |
| tree | e1283916edf5b76baafb49a199be019ffd1d2d7f | |
| parent | 3fceabfa113983549b5784dfd3f42259a53c258b (diff) | |
Core/Transports: Fixed accessing deleted instance transports
Thanks @jackpoz for valgrind log and @pete318 for reproduction steps
Closes #15633
| -rw-r--r-- | src/server/game/Entities/Transport/Transport.cpp | 1 | ||||
| -rw-r--r-- | src/server/game/Maps/Map.cpp | 7 |
2 files changed, 7 insertions, 1 deletions
diff --git a/src/server/game/Entities/Transport/Transport.cpp b/src/server/game/Entities/Transport/Transport.cpp index e6b3067cc2a..8b49f61a176 100644 --- a/src/server/game/Entities/Transport/Transport.cpp +++ b/src/server/game/Entities/Transport/Transport.cpp @@ -100,7 +100,6 @@ bool Transport::Create(ObjectGuid::LowType guidlow, uint32 entry, uint32 mapid, void Transport::CleanupsBeforeDelete(bool finalCleanup /*= true*/) { - HashMapHolder<Transport>::Remove(this); UnloadStaticPassengers(); while (!_passengers.empty()) { diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 1e35722202c..85cc87eaa6e 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -404,6 +404,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<std::mutex> lock(_gridLock); |
