From ed0f26678c9aa154d3af441762b9a3ad5345747c Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Sun, 20 Nov 2011 05:26:02 +0300 Subject: Fix memory leak in char selection dialog. --- src/gui/charselectdialog.cpp | 1 + src/net/charhandler.h | 2 ++ src/net/ea/charserverhandler.cpp | 7 +++++++ src/net/ea/charserverhandler.h | 2 ++ 4 files changed, 12 insertions(+) diff --git a/src/gui/charselectdialog.cpp b/src/gui/charselectdialog.cpp index 93302e0ff..15d1e6e0e 100644 --- a/src/gui/charselectdialog.cpp +++ b/src/gui/charselectdialog.cpp @@ -186,6 +186,7 @@ CharSelectDialog::CharSelectDialog(LoginData *data): CharSelectDialog::~CharSelectDialog() { + Net::getCharHandler()->clear(); } void CharSelectDialog::action(const gcn::ActionEvent &event) diff --git a/src/net/charhandler.h b/src/net/charhandler.h index 72a81684c..848354e96 100644 --- a/src/net/charhandler.h +++ b/src/net/charhandler.h @@ -90,6 +90,8 @@ class CharHandler virtual unsigned int maxSprite() const = 0; + virtual void clear() = 0; + protected: CharHandler() : mSelectedCharacter(0), diff --git a/src/net/ea/charserverhandler.cpp b/src/net/ea/charserverhandler.cpp index d71236496..63e267584 100644 --- a/src/net/ea/charserverhandler.cpp +++ b/src/net/ea/charserverhandler.cpp @@ -33,6 +33,7 @@ #include "net/ea/loginhandler.h" #include "net/ea/eaprotocol.h" +#include "utils/dtor.h" #include "utils/gettext.h" #include "resources/chardb.h" @@ -184,4 +185,10 @@ void CharServerHandler::processCharDeleteFailed(Net::MessageIn &msg A_UNUSED) new OkDialog(_("Error"), _("Failed to delete character.")); } +void CharServerHandler::clear() +{ + delete_all(mCharacters); + mCharacters.clear(); +} + } // namespace Ea diff --git a/src/net/ea/charserverhandler.h b/src/net/ea/charserverhandler.h index bd39781cd..bab941503 100644 --- a/src/net/ea/charserverhandler.h +++ b/src/net/ea/charserverhandler.h @@ -78,6 +78,8 @@ class CharServerHandler : public Net::CharHandler virtual void processCharDeleteFailed(Net::MessageIn &msg); + virtual void clear(); + protected: virtual void readPlayerData(Net::MessageIn &msg, Net::Character *character, -- cgit v1.2.3-60-g2f50