GRAPHICS: MACGUI: Fix memory leak

Clean up _desktopBmp before it's reallocated again.
This commit is contained in:
Roland van Laar 2022-09-20 23:09:17 +02:00
parent 19e9f97824
commit c537cd9ca6
2 changed files with 13 additions and 7 deletions

View File

@ -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);

View File

@ -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);