summary refs log tree commit diff stats
path: root/results/scraper/fex/4131
diff options
context:
space:
mode:
Diffstat (limited to 'results/scraper/fex/4131')
-rw-r--r--results/scraper/fex/413113
1 files changed, 13 insertions, 0 deletions
diff --git a/results/scraper/fex/4131 b/results/scraper/fex/4131
new file mode 100644
index 000000000..a192d8bb2
--- /dev/null
+++ b/results/scraper/fex/4131
@@ -0,0 +1,13 @@
+Bear's Restaurant has race condition with deferred signal handling
+[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.
\ No newline at end of file