[Scummvm-git-logs] scummvm master -> 934567a87c3352c8f1327f072c5fa0f8bc09a324
eriktorbjorn
noreply at scummvm.org
Tue Nov 16 12:34:31 UTC 2021
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
934567a87c GUI: Fix grid memory leaks
Commit: 934567a87c3352c8f1327f072c5fa0f8bc09a324
https://github.com/scummvm/scummvm/commit/934567a87c3352c8f1327f072c5fa0f8bc09a324
Author: Torbjörn Andersson (eriktorbjorn at users.sourceforge.net)
Date: 2021-11-16T13:34:17+01:00
Commit Message:
GUI: Fix grid memory leaks
Clearing a HashMap doesn't delete the objects stored inside it, so do
that explicitly.
Changed paths:
gui/widgets/grid.cpp
gui/widgets/grid.h
diff --git a/gui/widgets/grid.cpp b/gui/widgets/grid.cpp
index 02819102f1..d6a7c23135 100644
--- a/gui/widgets/grid.cpp
+++ b/gui/widgets/grid.cpp
@@ -375,15 +375,23 @@ GridWidget::GridWidget(GuiObject *boss, const Common::String &name)
}
GridWidget::~GridWidget() {
- _platformIcons.clear();
- _languageIcons.clear();
- _loadedSurfaces.clear();
+ unloadSurfaces(_platformIcons);
+ unloadSurfaces(_languageIcons);
+ unloadSurfaces(_loadedSurfaces);
_gridItems.clear();
_dataEntryList.clear();
_sortedEntryList.clear();
_visibleEntryList.clear();
}
+template<typename T>
+void GridWidget::unloadSurfaces(Common::HashMap<T, const Graphics::ManagedSurface *> &surfaces) {
+ for (typename Common::HashMap<T, const Graphics::ManagedSurface *>::iterator i = surfaces.begin(); i != surfaces.end(); ++i) {
+ delete i->_value;
+ }
+ surfaces.clear();
+}
+
const Graphics::ManagedSurface *GridWidget::filenameToSurface(const Common::String &name) {
for (Common::Array<GridItemInfo *>::iterator l = _visibleEntryList.begin(); l != _visibleEntryList.end(); ++l) {
if ((!(*l)->isHeader) && ((*l)->thumbPath == name)) {
@@ -808,7 +816,7 @@ void GridWidget::reflowLayout() {
_thumbnailHeight = g_gui.xmlEval()->getVar("Globals.GridItemThumbnail.Height");
_thumbnailWidth = g_gui.xmlEval()->getVar("Globals.GridItemThumbnail.Width");
if ((oldThumbnailHeight != _thumbnailHeight) || (oldThumbnailWidth != _thumbnailWidth)) {
- _loadedSurfaces.clear();
+ unloadSurfaces(_loadedSurfaces);
reloadThumbnails();
loadFlagIcons();
}
diff --git a/gui/widgets/grid.h b/gui/widgets/grid.h
index 8727726921..b3772edecb 100644
--- a/gui/widgets/grid.h
+++ b/gui/widgets/grid.h
@@ -163,6 +163,9 @@ public:
GridWidget(GuiObject *boss, const Common::String &name);
~GridWidget();
+ template<typename T>
+ void unloadSurfaces(Common::HashMap<T, const Graphics::ManagedSurface *> &surfaces);
+
const Graphics::ManagedSurface *filenameToSurface(const Common::String &name);
const Graphics::ManagedSurface *languageToSurface(Common::Language languageCode);
const Graphics::ManagedSurface *platformToSurface(Common::Platform platformCode);
More information about the Scummvm-git-logs
mailing list