From ad008c43b75080ec59aa973f1e2e4424332c34a4 Mon Sep 17 00:00:00 2001 From: xinef1 Date: Sat, 4 Feb 2017 22:37:16 +0100 Subject: Core/Misc: Fix various crashes, also related to multithreading (#19012) * When iterating groups we have to either do it not in multithreaded context (map updates) or start with checking maps (they are guaranteed to change in single thread update). * Properly clear ComboPoint references on player remove * remove some possible references item may have when it is deleted during save. * Also clear all hostile references when unit is removed from map. (cherrypicked from 86da1a19bb36edf3242dafac6e45e87434ddff73) --- src/server/game/Loot/Loot.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/server/game/Loot/Loot.cpp') diff --git a/src/server/game/Loot/Loot.cpp b/src/server/game/Loot/Loot.cpp index ab32019a4cc..c16178da814 100644 --- a/src/server/game/Loot/Loot.cpp +++ b/src/server/game/Loot/Loot.cpp @@ -266,7 +266,8 @@ bool Loot::FillLoot(uint32 lootId, LootStore const& store, Player* lootOwner, bo for (GroupReference* itr = group->GetFirstMember(); itr != NULL; itr = itr->next()) if (Player* player = itr->GetSource()) // should actually be looted object instead of lootOwner but looter has to be really close so doesnt really matter - FillNotNormalLootFor(player, player->IsAtGroupRewardDistance(lootOwner)); + if (player->IsInMap(lootOwner)) + FillNotNormalLootFor(player, player->IsAtGroupRewardDistance(lootOwner)); for (uint8 i = 0; i < items.size(); ++i) { -- cgit v1.2.3