FEX-Emu / FEX-Emu/FEX

Bear's Restaurant has race condition with deferred signal handling

Open
#4,131 2 comments 0 reactions 0 assignees View on GitHub
bug Game related Linux Guest
Dominant language
C++
Stars
8k
Forks
351
Avg merge
12h 31m
Merged PRs (30d)
102

Description

[Bear's Restaurant](https://store.steampowered.com/app/1687550/Bears_Restaurant/) has a race condition with FEX's deferred signal handling. Its [game engine](https://ebitengine.org/) 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.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.