[Scummvm-git-logs] scummvm master -> c537cd9ca68ec9d318b8b78b91604fe57c2585f5

rvanlaar noreply at scummvm.org
Tue Sep 20 21:12:28 UTC 2022


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:
c537cd9ca6 GRAPHICS: MACGUI: Fix memory leak


Commit: c537cd9ca68ec9d318b8b78b91604fe57c2585f5
    https://github.com/scummvm/scummvm/commit/c537cd9ca68ec9d318b8b78b91604fe57c2585f5
Author: Roland van Laar (roland at rolandvanlaar.nl)
Date: 2022-09-20T23:12:09+02:00

Commit Message:
GRAPHICS: MACGUI: Fix memory leak

Clean up _desktopBmp before it's reallocated again.

Changed paths:
    graphics/macgui/macwindowmanager.cpp
    graphics/macgui/macwindowmanager.h


diff --git a/graphics/macgui/macwindowmanager.cpp b/graphics/macgui/macwindowmanager.cpp
index 73a371c332c..32afc142b21 100644
--- a/graphics/macgui/macwindowmanager.cpp
+++ b/graphics/macgui/macwindowmanager.cpp
@@ -228,6 +228,13 @@ MacWindowManager::MacWindowManager(uint32 mode, MacPatterns *patterns, Common::L
 	setDesktopMode(mode);
 }
 
+void MacWindowManager::cleanupDesktopBmp() {
+	if (_desktopBmp) {
+		_desktopBmp->free();
+		delete _desktopBmp;
+	}
+}
+
 MacWindowManager::~MacWindowManager() {
 	for (Common::HashMap<uint, BaseMacWindow *>::iterator it = _windows.begin(); it != _windows.end(); it++)
 		delete it->_value;
@@ -238,12 +245,9 @@ MacWindowManager::~MacWindowManager() {
 	delete _fontMan;
 	delete _screenCopy;
 
-	if (_desktopBmp) {
-		_desktopBmp->free();
-		delete _desktopBmp;
-	}
 	delete _desktop;
 
+	cleanupDesktopBmp();
 	cleanupDataBundle();
 
 	g_system->getTimerManager()->removeTimerProc(&menuTimerHandler);
@@ -253,9 +257,8 @@ void MacWindowManager::setDesktopMode(uint32 mode) {
 	if (!(mode & Graphics::kWMNoScummVMWallpaper)) {
 		if (!_mode || (_mode & Graphics::kWMNoScummVMWallpaper))
 			loadDesktop();
-	} else if (_desktopBmp) {
-		_desktopBmp->free();
-		_desktopBmp = nullptr;
+	} else {
+		cleanupDesktopBmp();
 	}
 
 	_mode = mode;
@@ -782,6 +785,7 @@ void MacWindowManager::loadDesktop() {
 }
 
 void MacWindowManager::setDesktopColor(byte r, byte g, byte b) {
+	cleanupDesktopBmp();
 	_desktopBmp = new Graphics::TransparentSurface();
 	uint32 color = TS_RGB(r, g, b);
 
diff --git a/graphics/macgui/macwindowmanager.h b/graphics/macgui/macwindowmanager.h
index c9d21110191..cd922d971b8 100644
--- a/graphics/macgui/macwindowmanager.h
+++ b/graphics/macgui/macwindowmanager.h
@@ -340,6 +340,8 @@ public:
 
 	void loadDataBundle();
 	void cleanupDataBundle();
+	void cleanupDesktopBmp();
+
 	BorderOffsets getBorderOffsets(byte windowType);
 	Common::SeekableReadStream *getBorderFile(byte windowType, uint32 flags);
 	Common::SeekableReadStream *getFile(const Common::String &filename);




More information about the Scummvm-git-logs mailing list