aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXanadu <none@none>2010-07-30 03:43:09 +0200
committerXanadu <none@none>2010-07-30 03:43:09 +0200
commit1e5ce69d196043f63d0f8dd37f03afb1a092e3e7 (patch)
treede2a97d06b6e9fa6d1bd17cc4b824a9fc0c809a9
parenteb852f5bbda3d99d262795dc16eb5e7d454ea806 (diff)
parent272e954a70c1b90d5e4b47e30d7eadcb231d7468 (diff)
Merge
--HG-- branch : trunk
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp20
-rw-r--r--src/server/game/Spells/Spell.cpp1
2 files changed, 13 insertions, 8 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 2394613d731..1c7f5468ada 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -4412,14 +4412,18 @@ void Unit::RemoveAreaAurasDueToLeaveWorld()
void Unit::RemoveAllAuras()
{
- AuraApplicationMap::iterator aurAppIter;
- for (aurAppIter = m_appliedAuras.begin(); aurAppIter != m_appliedAuras.end();)
- _UnapplyAura(aurAppIter, AURA_REMOVE_BY_DEFAULT);
-
- AuraMap::iterator aurIter;
- for (aurIter = m_ownedAuras.begin(); aurIter != m_ownedAuras.end();)
- RemoveOwnedAura(aurIter);
-
+ // this may be a dead loop if some events on aura remove will continiously apply aura on remove
+ // we want to have all auras removed, so use your brain when linking events
+ while (!m_appliedAuras.empty() || !m_ownedAuras.empty())
+ {
+ AuraApplicationMap::iterator aurAppIter;
+ for (aurAppIter = m_appliedAuras.begin(); aurAppIter != m_appliedAuras.end();)
+ _UnapplyAura(aurAppIter, AURA_REMOVE_BY_DEFAULT);
+
+ AuraMap::iterator aurIter;
+ for (aurIter = m_ownedAuras.begin(); aurIter != m_ownedAuras.end();)
+ RemoveOwnedAura(aurIter);
+ }
}
void Unit::RemoveArenaAuras(bool onleave)
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index 109a592dd7f..e538d93a29e 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -6681,6 +6681,7 @@ SpellEvent::~SpellEvent()
{
sLog.outError("~SpellEvent: %s %u tried to delete non-deletable spell %u. Was not deleted, causes memory leak.",
(m_Spell->GetCaster()->GetTypeId() == TYPEID_PLAYER ? "Player" : "Creature"), m_Spell->GetCaster()->GetGUIDLow(), m_Spell->m_spellInfo->Id);
+ ASSERT(false);
}
}