@@ -128,6 +128,8 @@ uint32_t FAudioCOMConstructWithCustomAllocatorEXT(
128128#ifndef FAUDIO_DISABLE_DEBUGCONFIGURATION
129129 FAudio_SetDebugConfiguration (* ppFAudio , & debugInit , NULL );
130130#endif /* FAUDIO_DISABLE_DEBUGCONFIGURATION */
131+ (* ppFAudio )-> refLock = FAudio_PlatformCreateMutex ();
132+ LOG_MUTEX_CREATE ((* ppFAudio ), (* ppFAudio )-> refLock )
131133 (* ppFAudio )-> sourceLock = FAudio_PlatformCreateMutex ();
132134 LOG_MUTEX_CREATE ((* ppFAudio ), (* ppFAudio )-> sourceLock )
133135 (* ppFAudio )-> submixLock = FAudio_PlatformCreateMutex ();
@@ -145,10 +147,20 @@ uint32_t FAudioCOMConstructWithCustomAllocatorEXT(
145147
146148uint32_t FAudio_AddRef (FAudio * audio )
147149{
150+ uint32_t refcount ;
151+
148152 LOG_API_ENTER (audio )
153+
154+ // FIXME: This should be SDL_AtomicIncRef -flibit
155+ FAudio_PlatformLockMutex (audio -> refLock );
156+ LOG_MUTEX_LOCK (audio , audio -> refLock )
149157 audio -> refcount += 1 ;
158+ refcount = audio -> refcount ;
159+ FAudio_PlatformUnlockMutex (audio -> refLock );
160+ LOG_MUTEX_UNLOCK (audio , audio -> refLock )
161+
150162 LOG_API_EXIT (audio )
151- return audio -> refcount ;
163+ return refcount ;
152164}
153165
154166static void destroy_voice (FAudioVoice * voice );
@@ -159,8 +171,15 @@ uint32_t FAudio_Release(FAudio *audio)
159171 FAudioVoice * voice ;
160172
161173 LOG_API_ENTER (audio )
174+
175+ // FIXME: This should be SDL_AtomicDecRef -flibit
176+ FAudio_PlatformLockMutex (audio -> refLock );
177+ LOG_MUTEX_LOCK (audio , audio -> refLock )
162178 audio -> refcount -= 1 ;
163179 refcount = audio -> refcount ;
180+ FAudio_PlatformUnlockMutex (audio -> refLock );
181+ LOG_MUTEX_UNLOCK (audio , audio -> refLock )
182+
164183 if (audio -> refcount == 0 )
165184 {
166185 while (audio -> sources )
@@ -180,6 +199,8 @@ uint32_t FAudio_Release(FAudio *audio)
180199 audio -> pFree (audio -> decodeCache );
181200 audio -> pFree (audio -> resampleCache );
182201 audio -> pFree (audio -> effectChainCache );
202+ LOG_MUTEX_DESTROY (audio , audio -> refLock )
203+ FAudio_PlatformDestroyMutex (audio -> refLock );
183204 LOG_MUTEX_DESTROY (audio , audio -> sourceLock )
184205 FAudio_PlatformDestroyMutex (audio -> sourceLock );
185206 LOG_MUTEX_DESTROY (audio , audio -> submixLock )
0 commit comments