Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GRAPHICS: MACGUI: [RFC] Attempt to fix suspected threading threading issues in the Macintosh Window Manager #5440

merged 1 commit into from Nov 18, 2023


Copy link

While working on the menu handling for the Macintosh versions of Indiana Jones and the Last Crusade and Loom, I've had the screen go mysteriously black on me two or three times. I think it's been when the menus have been either about to be activated or inactivated, which makes me suspect that it's a threading issue. The menus are activated by a timer, so anything that timer function touches could be at risk.

So I've added a mutex to try and guard against this. But threading is something I generally try to avoid (the Last Crusade GUI, despite its many timed animations, remain steadfastly single-threaded), so I don't know if I'm doing this right. At all.

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.
Copy link

coderabbitai bot commented Nov 16, 2023



The changes involve adding thread safety to the MacWindowManager class in a graphics library. Mutex locking is introduced in critical sections of the code to prevent race conditions when multiple threads access shared resources. This is achieved by using Common::StackLock in various member functions and including the necessary mutex header file. A mutex object is also added to the class to facilitate the locking mechanism.


File Path Change Summary
graphics/macgui/macwindowmanager.cpp Added Common::StackLock for mutex locking in destructor and methods setScreen, resizeScreen, activateScreenCopy, disableScreenCopy, draw, and renderZoomBox to ensure thread safety.
graphics/macgui/macwindowmanager.h Included "common/mutex.h" and added a Common::Mutex object named "_mutex" to the MacWindowManager class for locking purposes.


Chat with CodeRabbit Bot (@coderabbitai)

  • If you reply to a review comment from CodeRabbit, the bot will automatically respond.
  • To engage with CodeRabbit bot directly around the specific lines of code in the PR, mention @coderabbitai in your review comment
  • Note: Review comments are made on code diffs or files, not on the PR overview.
  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.

CodeRabbit Commands (invoked as PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger a review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai help to get help.

Note: For conversation with the bot, please use the review comments on code diffs or files.

CodeRabbit Configration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • The JSON schema for the configuration file is available here.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=

@AndywinXp AndywinXp changed the title [RFC] Attempt to fix suspected threading threading issues in the Macintosh Window Manager GRAPHICS: MACGUI: [RFC] Attempt to fix suspected threading threading issues in the Macintosh Window Manager Nov 18, 2023
Copy link

sev- commented Nov 18, 2023

Yes, looks fine to me, merging. Thank you!

@sev- sev- merged commit b2568e0 into scummvm:master Nov 18, 2023
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
None yet
None yet
2 participants