[Scummvm-git-logs] scummvm master -> b2568e05ce7ce8b7a535d7290e427c4cddab626d
sev-
noreply at scummvm.org
Sat Nov 18 17:49:59 UTC 2023
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:
b2568e05ce GRAPHICS: MACGUI: Attempt to fix threading issues
Commit: b2568e05ce7ce8b7a535d7290e427c4cddab626d
https://github.com/scummvm/scummvm/commit/b2568e05ce7ce8b7a535d7290e427c4cddab626d
Author: Torbjörn Andersson (eriktorbjorn at users.sourceforge.net)
Date: 2023-11-18T18:49:55+01:00
Commit Message:
GRAPHICS: MACGUI: Attempt to fix threading issues
The menuTimerHandler() function is called from a timer, which means that
anything that it touches could potentially cause threading issues. I
suspect this is what's been causing the screen to go black for me a few
times, but it's not something I can reproduce at will. Add a mutex to
try and fix this.
Changed paths:
graphics/macgui/macwindowmanager.cpp
graphics/macgui/macwindowmanager.h
diff --git a/graphics/macgui/macwindowmanager.cpp b/graphics/macgui/macwindowmanager.cpp
index 039172798fb..e36a8f93c8d 100644
--- a/graphics/macgui/macwindowmanager.cpp
+++ b/graphics/macgui/macwindowmanager.cpp
@@ -242,6 +242,8 @@ void MacWindowManager::cleanupDesktopBmp() {
}
MacWindowManager::~MacWindowManager() {
+ Common::StackLock lock(_mutex);
+
for (Common::HashMap<uint, BaseMacWindow *>::iterator it = _windows.begin(); it != _windows.end(); it++)
delete it->_value;
@@ -271,6 +273,8 @@ void MacWindowManager::setDesktopMode(uint32 mode) {
}
void MacWindowManager::setScreen(ManagedSurface *screen) {
+ Common::StackLock lock(_mutex);
+
_screen = screen;
delete _screenCopy;
_screenCopy = nullptr;
@@ -304,6 +308,8 @@ int MacWindowManager::getHeight() {
}
void MacWindowManager::resizeScreen(int w, int h) {
+ Common::StackLock lock(_mutex);
+
if (!_screen)
error("MacWindowManager::resizeScreen(): Trying to creating surface on non-existing screen");
_screenDims = Common::Rect(w, h);
@@ -447,6 +453,8 @@ void MacWindowManager::activateMenu() {
}
void MacWindowManager::activateScreenCopy() {
+ Common::StackLock lock(_mutex);
+
if (_screen) {
if (!_screenCopy)
_screenCopy = new ManagedSurface(*_screen); // Create a copy
@@ -467,6 +475,8 @@ void MacWindowManager::activateScreenCopy() {
}
void MacWindowManager::disableScreenCopy() {
+ Common::StackLock lock(_mutex);
+
if (_screenCopyPauseToken) {
_screenCopyPauseToken->clear();
delete _screenCopyPauseToken;
@@ -884,6 +894,8 @@ void MacWindowManager::drawDesktop() {
}
void MacWindowManager::draw() {
+ Common::StackLock lock(_mutex);
+
removeMarked();
Common::Rect bounds = getScreenBounds();
@@ -1153,6 +1165,8 @@ void MacWindowManager::addZoomBox(ZoomBox *box) {
}
void MacWindowManager::renderZoomBox(bool redraw) {
+ Common::StackLock lock(_mutex);
+
if (!_zoomBoxes.size())
return;
diff --git a/graphics/macgui/macwindowmanager.h b/graphics/macgui/macwindowmanager.h
index 4267f48429f..6dbc3f56f12 100644
--- a/graphics/macgui/macwindowmanager.h
+++ b/graphics/macgui/macwindowmanager.h
@@ -24,6 +24,7 @@
#include "common/hashmap.h"
#include "common/list.h"
+#include "common/mutex.h"
#include "common/stack.h"
#include "common/events.h"
@@ -434,6 +435,7 @@ public:
Common::Rect _screenDims;
private:
+ Common::Mutex _mutex;
Common::List<BaseMacWindow *> _windowStack;
Common::HashMap<uint, BaseMacWindow *> _windows;
More information about the Scummvm-git-logs
mailing list