From ed39c71b2b6b47931f352ca07b49f631d6bf713a Mon Sep 17 00:00:00 2001 From: Jared Adams Date: Sun, 7 Feb 2010 17:10:39 -0700 Subject: Cleanup some memory issues --- src/gui/serverdialog.cpp | 4 ++++ src/gui/setup_video.cpp | 2 +- src/gui/updatewindow.cpp | 3 +++ src/gui/widgets/dropdown.cpp | 4 ++-- src/gui/widgets/dropdown.h | 2 +- src/gui/widgets/listbox.cpp | 13 +++++++++++-- src/gui/widgets/listbox.h | 6 +++++- src/net/download.cpp | 6 ++++-- 8 files changed, 31 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/gui/serverdialog.cpp b/src/gui/serverdialog.cpp index 07f23c0a..b5cd5366 100644 --- a/src/gui/serverdialog.cpp +++ b/src/gui/serverdialog.cpp @@ -227,7 +227,11 @@ ServerDialog::ServerDialog(ServerInfo *serverInfo, const std::string &dir): ServerDialog::~ServerDialog() { if (mDownload) + { mDownload->cancel(); + delete mDownload; + mDownload = 0; + } delete mServersListModel; delete mTypeListModel; } diff --git a/src/gui/setup_video.cpp b/src/gui/setup_video.cpp index 4a5a1d9a..9c6c8dad 100644 --- a/src/gui/setup_video.cpp +++ b/src/gui/setup_video.cpp @@ -236,7 +236,7 @@ Setup_Video::Setup_Video(): particleDetailLabel = new Label(_("Particle detail")); fontSizeLabel = new Label(_("Font size")); - mFontSizeDropDown = new DropDown(new FontSizeChoiceListModel); + mFontSizeDropDown = new DropDown(new FontSizeChoiceListModel, true); mModeList->setEnabled(true); diff --git a/src/gui/updatewindow.cpp b/src/gui/updatewindow.cpp index 508148e6..85a14ba8 100644 --- a/src/gui/updatewindow.cpp +++ b/src/gui/updatewindow.cpp @@ -180,6 +180,9 @@ UpdaterWindow::~UpdaterWindow() if (mDownload) { mDownload->cancel(); + + delete mDownload; + mDownload = 0; } free(mMemoryBuffer); } diff --git a/src/gui/widgets/dropdown.cpp b/src/gui/widgets/dropdown.cpp index b8f5b895..80c3747e 100644 --- a/src/gui/widgets/dropdown.cpp +++ b/src/gui/widgets/dropdown.cpp @@ -43,10 +43,10 @@ Image *DropDown::buttons[2][2]; ImageRect DropDown::skin; float DropDown::mAlpha = 1.0; -DropDown::DropDown(gcn::ListModel *listModel): +DropDown::DropDown(gcn::ListModel *listModel, bool deleteModel): gcn::DropDown::DropDown(listModel, new ScrollArea, - new ListBox(listModel)) + new ListBox(listModel, deleteModel)) { setFrameSize(2); diff --git a/src/gui/widgets/dropdown.h b/src/gui/widgets/dropdown.h index f4ab4c93..eda7b1fa 100644 --- a/src/gui/widgets/dropdown.h +++ b/src/gui/widgets/dropdown.h @@ -45,7 +45,7 @@ class DropDown : public gcn::DropDown * @param listBox the listBox to use. * @see ListModel, ScrollArea, ListBox. */ - DropDown(gcn::ListModel *listModel = NULL); + DropDown(gcn::ListModel *listModel = NULL, bool deleteModel = false); ~DropDown(); diff --git a/src/gui/widgets/listbox.cpp b/src/gui/widgets/listbox.cpp index 7f96ad3e..e97f1d63 100644 --- a/src/gui/widgets/listbox.cpp +++ b/src/gui/widgets/listbox.cpp @@ -34,11 +34,20 @@ float ListBox::mAlpha = 1.0; -ListBox::ListBox(gcn::ListModel *listModel): - gcn::ListBox(listModel) +ListBox::ListBox(gcn::ListModel *listModel, bool deleteModel): + gcn::ListBox(listModel), + mDeleteModel(deleteModel) { } +ListBox::~ListBox() +{ + if (mDeleteModel) + { + delete mListModel; + } +} + void ListBox::updateAlpha() { float alpha = std::max(config.getValue("guialpha", 0.8), diff --git a/src/gui/widgets/listbox.h b/src/gui/widgets/listbox.h index d5798d66..c0662ed2 100644 --- a/src/gui/widgets/listbox.h +++ b/src/gui/widgets/listbox.h @@ -39,7 +39,9 @@ class ListBox : public gcn::ListBox /** * Constructor. */ - ListBox(gcn::ListModel *listModel); + ListBox(gcn::ListModel *listModel, bool deleteModel = false); + + ~ListBox(); /** * Draws the list box. @@ -65,6 +67,8 @@ class ListBox : public gcn::ListBox private: static float mAlpha; + + bool mDeleteModel; }; #endif diff --git a/src/net/download.cpp b/src/net/download.cpp index d722d9b7..d5903551 100644 --- a/src/net/download.cpp +++ b/src/net/download.cpp @@ -79,10 +79,12 @@ Download::Download(void *ptr, const std::string &url, Download::~Download() { - delete mError; - if (mHeaders) curl_slist_free_all(mHeaders); + + int status; + SDL_WaitThread(mThread, &status); + free(mError); } void Download::addHeader(const std::string &header) -- cgit v1.2.3-70-g09d2