From a7164a5d8f1f5088dfc1540638ffb0153f5f6a89 Mon Sep 17 00:00:00 2001
From: alufolie91 <alufoliehorst@gmail.com>
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 c5650192d..b2f6ec500 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;
 }
 
 /// ------------------------
-- 
GitLab