From a7164a5d8f1f5088dfc1540638ffb0153f5f6a89 Mon Sep 17 00:00:00 2001 From: alufolie91 Date: Tue, 15 Aug 2023 03:28:51 +0200 Subject: [PATCH] Do music fade callback on main thread Fixes music fades crashing the game sometimes Backport from SRB2 See: https://git.do.srb2.org/STJr/SRB2/-/commit/0aa763df8543cf98eb2ca8da1d3a77e80f3a3119 Credits to Lactozilla --- src/sdl/mixer_sound.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/sdl/mixer_sound.c b/src/sdl/mixer_sound.c index c5650192..b2f6ec50 100644 --- a/src/sdl/mixer_sound.c +++ b/src/sdl/mixer_sound.c @@ -90,6 +90,7 @@ static UINT32 fading_timer; static UINT32 fading_duration; static INT32 fading_id; static void (*fading_callback)(void); +static boolean fading_do_callback; #ifdef HAVE_LIBGME static Music_Emu *gme; @@ -106,6 +107,7 @@ static void var_cleanup(void) is_fading = false; fading_callback = NULL; + fading_do_callback = false; internal_volume = 100; } @@ -202,6 +204,13 @@ void I_ShutdownSound(void) void I_UpdateSound(void) { + if (fading_do_callback) + { + if (fading_callback) + (*fading_callback)(); + fading_callback = NULL; + fading_do_callback = false; + } } /// ------------------------ @@ -526,9 +535,8 @@ static UINT32 get_adjusted_position(UINT32 position) static void do_fading_callback(void) { - if (fading_callback) - (*fading_callback)(); - fading_callback = NULL; + // TODO: Should I use a mutex here or something? + fading_do_callback = true; } /// ------------------------