From 8506c1b588a31c8a3f064621edec44abb6a09e43 Mon Sep 17 00:00:00 2001 From: Wiseguy <68165316+Mr-Wiseguy@users.noreply.github.com> Date: Sun, 6 Apr 2025 19:42:15 -0400 Subject: [PATCH] Fix race condition where update_gfx could be called after renderer shutdown (#98) --- librecomp/src/recomp.cpp | 3 +++ ultramodern/src/events.cpp | 2 ++ 2 files changed, 5 insertions(+) diff --git a/librecomp/src/recomp.cpp b/librecomp/src/recomp.cpp index 9cdcce6..640e285 100644 --- a/librecomp/src/recomp.cpp +++ b/librecomp/src/recomp.cpp @@ -502,6 +502,7 @@ bool ultramodern::is_game_started() { } std::atomic_bool exited = false; +moodycamel::LightweightSemaphore graphics_shutdown_ready; void ultramodern::quit() { exited.store(true); @@ -763,6 +764,8 @@ void recomp::start( } } + graphics_shutdown_ready.signal(); + game_thread.join(); ultramodern::join_event_threads(); ultramodern::join_thread_cleaner_thread(); diff --git a/ultramodern/src/events.cpp b/ultramodern/src/events.cpp index 879d536..fed835d 100644 --- a/ultramodern/src/events.cpp +++ b/ultramodern/src/events.cpp @@ -105,6 +105,7 @@ uint64_t total_vis = 0; extern std::atomic_bool exited; +extern moodycamel::LightweightSemaphore graphics_shutdown_ready; void set_dummy_vi(); @@ -318,6 +319,7 @@ void gfx_thread_func(uint8_t* rdram, moodycamel::LightweightSemaphore* thread_re } } + graphics_shutdown_ready.wait(); renderer_context->shutdown(); }