From b2447e7197a88f49c037397f899185616d4b9c67 Mon Sep 17 00:00:00 2001 From: fallenoak Date: Tue, 25 Nov 2025 20:49:35 -0600 Subject: [PATCH] fix(sound): correct ready list logic in DoneLoadingCallback --- src/sound/SESound.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/sound/SESound.cpp b/src/sound/SESound.cpp index f00f364..0b62cec 100644 --- a/src/sound/SESound.cpp +++ b/src/sound/SESound.cpp @@ -61,8 +61,6 @@ FMOD_RESULT DoneLoadingCallback(FMOD_SOUND* fmodSound, FMOD_RESULT callbackResul return FMOD_OK; } - auto internal = static_cast(lookup->m_internal); - if (callbackResult != FMOD_OK) { // TODO @@ -71,8 +69,8 @@ FMOD_RESULT DoneLoadingCallback(FMOD_SOUND* fmodSound, FMOD_RESULT callbackResul // Add to ready list (processed by SESound::Heartbeat) - for (auto existing = SESound::s_InternalList.Head(); existing; existing = SESound::s_InternalList.Link(internal)->Next()) { - auto pendingLoad = internal->m_type == 1 + for (auto existing = SESound::s_InternalList.Head(); existing; existing = SESound::s_InternalList.Link(existing)->Next()) { + auto pendingLoad = existing->m_type == 1 && static_cast(existing)->m_fmodSound == reinterpret_cast(fmodSound) && !existing->m_fmodChannel; @@ -87,8 +85,8 @@ FMOD_RESULT DoneLoadingCallback(FMOD_SOUND* fmodSound, FMOD_RESULT callbackResul // Mark cache sound node as loaded - if (internal->m_useCache) { - internal->m_cacheNode->loaded = 1; + if (lookup->m_internal->m_useCache) { + static_cast(lookup->m_internal)->m_cacheNode->loaded = 1; } SESound::s_LoadingCritSect.Leave();