summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog1
-rw-r--r--src/resources/spritedef.cpp16
2 files changed, 17 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index cac92732..f1a55a99 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -17,6 +17,7 @@
* src/gui/inventorywindow.cpp, src/gui/inventorywindow.h: Removed
redundant destructor.
* src/resources/monsterdb.cpp: Plugged memory leak in database reader.
+ * src/resources/spritedef.cpp: Plugged memory leak in sprites.
2007-10-20 Guillaume Melquiond <guillaume.melquiond@gmail.com>
diff --git a/src/resources/spritedef.cpp b/src/resources/spritedef.cpp
index 0daa0cc0..45a52d2e 100644
--- a/src/resources/spritedef.cpp
+++ b/src/resources/spritedef.cpp
@@ -21,6 +21,8 @@
* $Id$
*/
+#include <set>
+
#include "spritedef.h"
#include "../log.h"
@@ -289,6 +291,20 @@ SpriteDef::substituteAction(SpriteAction complete, SpriteAction with)
SpriteDef::~SpriteDef()
{
+ // Actions are shared, so ensure they are deleted only once.
+ std::set< Action * > actions;
+ for (Actions::const_iterator i = mActions.begin(),
+ i_end = mActions.end(); i != i_end; ++i)
+ {
+ actions.insert(i->second);
+ }
+
+ for (std::set< Action * >::const_iterator i = actions.begin(),
+ i_end = actions.end(); i != i_end; ++i)
+ {
+ delete *i;
+ }
+
for (ImageSetIterator i = mImageSets.begin();
i != mImageSets.end(); ++i)
{