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

Bear's Restaurant has race condition with deferred signal handling #4131

Open
Sonicadvance1 opened this issue Oct 24, 2024 · 0 comments
Open
Labels
bug Something isn't working Game related Linux Guest

Comments

@Sonicadvance1
Copy link
Member

Bear's Restaurant has a race condition with FEX's deferred signal handling. Its game engine is based on golang, which sends SIGURG /very/ quickly for doing preemption to ensure thread fairness.

A couple of things to fix in FEX's deferred signal handling.

  • If its not a realtime signal, then these shouldn't be queued and instead just set in a mask of available signals.
    • Linux doesn't queue non-RT signals, expecting many non-RT signals to be lost rather than queued
  • FEX should block the sa_mask in the signal handler of the signal getting deferred, to ensure it doesn't receive anymore of that signal.
    • This would ensure FEX doesn't overrun its small signal queue, which can typically result in crashes.
    • Make sure to restore signal mask once actually handling the signal

I don't have time to implement these fixes right now but I needed a tracking issue to remember it.

I originally wanted to test this engine to see it break under Asahi Linux, but apparently it uses a new enough version of golang that it no longer hits the VDSO bug, might need to try an older game using this engine to see the Asahi breakage.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working Game related Linux Guest
Projects
None yet
Development

No branches or pull requests

1 participant