Avoid CheckWards->DeleteCasterSpell->RemoveWard(LuaSpell) deadlocking
This commit is contained in:
parent
9274bc9ced
commit
879a00676c
@ -2335,11 +2335,13 @@ void Entity::RemoveWard(LuaSpell* spell) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int32 Entity::CheckWards(Entity* attacker, int32 damage, int8 damage_type) {
|
int32 Entity::CheckWards(Entity* attacker, int32 damage, int8 damage_type) {
|
||||||
std::unique_lock lock(MWardList);
|
|
||||||
map<int32, WardInfo*>::iterator itr;
|
map<int32, WardInfo*>::iterator itr;
|
||||||
WardInfo* ward = 0;
|
WardInfo* ward = 0;
|
||||||
LuaSpell* spell = 0;
|
LuaSpell* spell = 0;
|
||||||
|
|
||||||
|
vector<LuaSpell*> tmp_deletes;
|
||||||
|
{
|
||||||
|
std::unique_lock lock(MWardList);
|
||||||
while (m_wardList.size() > 0 && damage > 0) {
|
while (m_wardList.size() > 0 && damage > 0) {
|
||||||
// Get the ward with the lowest base damage
|
// Get the ward with the lowest base damage
|
||||||
for (itr = m_wardList.begin(); itr != m_wardList.end(); itr++) {
|
for (itr = m_wardList.begin(); itr != m_wardList.end(); itr++) {
|
||||||
@ -2480,7 +2482,7 @@ int32 Entity::CheckWards(Entity* attacker, int32 damage, int8 damage_type) {
|
|||||||
if(itr->second->DeleteWard) {
|
if(itr->second->DeleteWard) {
|
||||||
WardInfo* info = itr->second;
|
WardInfo* info = itr->second;
|
||||||
itr = m_wardList.erase(itr);
|
itr = m_wardList.erase(itr);
|
||||||
GetZone()->GetSpellProcess()->DeleteCasterSpell(info->Spell, "purged");
|
tmp_deletes.push_back(info->Spell);
|
||||||
safe_delete(info);
|
safe_delete(info);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -2488,7 +2490,11 @@ int32 Entity::CheckWards(Entity* attacker, int32 damage, int8 damage_type) {
|
|||||||
itr++;
|
itr++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (auto it = tmp_deletes.begin(); it != tmp_deletes.end(); ++it) {
|
||||||
|
GetZone()->GetSpellProcess()->DeleteCasterSpell(*it, "purged");
|
||||||
|
}
|
||||||
return damage;
|
return damage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user