summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2011-06-05 04:45:51 +0300
committerAndrei Karas <akaras@inbox.ru>2011-06-05 04:45:51 +0300
commit93aa9c81a2043c6caecd8437bfecbfa0c9b79436 (patch)
tree3438b31a08a3d5ec673f439c1cbc8fd7bd5ae59a
parent6d06bec226e4d6966e62612b41baf336955b23f4 (diff)
downloadmv-93aa9c81a2043c6caecd8437bfecbfa0c9b79436.tar.gz
mv-93aa9c81a2043c6caecd8437bfecbfa0c9b79436.tar.bz2
mv-93aa9c81a2043c6caecd8437bfecbfa0c9b79436.tar.xz
mv-93aa9c81a2043c6caecd8437bfecbfa0c9b79436.zip
Fix memory leak in equipmentwindow and socialwindow.
-rw-r--r--src/gui/equipmentwindow.cpp11
-rw-r--r--src/gui/popupmenu.cpp3
-rw-r--r--src/gui/socialwindow.cpp8
3 files changed, 18 insertions, 4 deletions
diff --git a/src/gui/equipmentwindow.cpp b/src/gui/equipmentwindow.cpp
index edad33623..92ff782ab 100644
--- a/src/gui/equipmentwindow.cpp
+++ b/src/gui/equipmentwindow.cpp
@@ -120,6 +120,13 @@ EquipmentWindow::~EquipmentWindow()
{
delete mItemPopup;
mItemPopup = 0;
+ if (this == beingEquipmentWindow)
+ {
+ if (mEquipment)
+ delete mEquipment->getBackend();
+ delete mEquipment;
+ mEquipment = 0;
+ }
}
void EquipmentWindow::draw(gcn::Graphics *graphics)
@@ -299,13 +306,13 @@ void EquipmentWindow::setBeing(Being *being)
mBeing = being;
if (!being)
{
+ if (mEquipment)
+ delete mEquipment->getBackend();
delete mEquipment;
mEquipment = 0;
return;
}
mEquipment = being->getEquipment();
- if (!mEquipment)
- return;
}
void EquipmentWindow::updateBeing(Being *being)
diff --git a/src/gui/popupmenu.cpp b/src/gui/popupmenu.cpp
index c3f28744c..a9905d4ca 100644
--- a/src/gui/popupmenu.cpp
+++ b/src/gui/popupmenu.cpp
@@ -1402,8 +1402,7 @@ void PopupMenu::handleLink(const std::string &link,
}
else
{
- Equipment *eq = being->getEquipment();
- if (eq && beingEquipmentWindow)
+ if (beingEquipmentWindow)
{
beingEquipmentWindow->setBeing(being);
beingEquipmentWindow->setVisible(true);
diff --git a/src/gui/socialwindow.cpp b/src/gui/socialwindow.cpp
index 7b8d064ce..de9bab42b 100644
--- a/src/gui/socialwindow.cpp
+++ b/src/gui/socialwindow.cpp
@@ -558,6 +558,14 @@ public:
std::list<MapItem*>::iterator i = portals.begin();
SpecialLayer *specialLayer = map->getSpecialLayer();
+ std::vector<Avatar*>::iterator ia = avatars->begin();
+
+ while (ia != avatars->end())
+ {
+ delete *ia;
+ ++ ia;
+ }
+
avatars->clear();
int idx = 0;