Attempt to fix music callback crash

This is a really old saturn fix
This commit is contained in:
NepDisk 2025-12-14 17:39:07 -05:00
parent a6661fc2e6
commit 4c30979447
2 changed files with 25 additions and 8 deletions

View file

@ -96,6 +96,7 @@ static UINT32 fading_timer;
static UINT32 fading_duration;
static INT32 fading_id;
static void (*fading_callback)(void);
static boolean fading_do_callback;
static boolean fading_nocleanup;
// any access (read/write) to this struct MUST lock the mutex
@ -263,6 +264,8 @@ static void var_cleanup(void)
else
fading_nocleanup = false; // use it once, set it back immediately
fading_do_callback = false;
internal_volume = 1.0f;
}
@ -532,6 +535,14 @@ void I_UpdateSound(void)
#ifndef HAVE_THREADS
UpdateSound(&audio);
#endif
if (fading_do_callback)
{
if (fading_callback)
(*fading_callback)();
fading_callback = NULL;
fading_do_callback = false;
}
}
static void AudioThread(void *userdata)
@ -929,10 +940,8 @@ void I_SetSfxVolume(UINT8 volume)
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;
}
static UINT32 music_fade(UINT32 interval, void *param)

View file

@ -116,6 +116,7 @@ static UINT32 fading_timer;
static UINT32 fading_duration;
static INT32 fading_id;
static void (*fading_callback)(void);
static boolean fading_do_callback;
static boolean fading_nocleanup;
#ifdef HAVE_GME
@ -148,6 +149,8 @@ static void var_cleanup(void)
else
fading_nocleanup = false; // use it once, set it back immediately
fading_do_callback = false;
internal_volume = MAX_VOLUME;
}
@ -259,6 +262,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;
}
}
/// ------------------------
@ -612,10 +622,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;
}
/// ------------------------