diff options
-rw-r--r-- | Alc/ALc.c | 1 | ||||
-rw-r--r-- | OpenAL32/Include/alSource.h | 2 | ||||
-rw-r--r-- | OpenAL32/alSource.c | 20 |
3 files changed, 23 insertions, 0 deletions
@@ -1013,6 +1013,7 @@ ALCAPI ALCvoid ALCAPIENTRY alcDestroyContext(ALCcontext *context) // Lock context SuspendContext(context); + ReleaseALSources(context); ReleaseALAuxiliaryEffectSlots(context); context->Device->Context = NULL; diff --git a/OpenAL32/Include/alSource.h b/OpenAL32/Include/alSource.h index f6a4619a..c0e829ae 100644 --- a/OpenAL32/Include/alSource.h +++ b/OpenAL32/Include/alSource.h @@ -97,6 +97,8 @@ typedef struct ALsource struct ALsource *next; } ALsource; +ALvoid ReleaseALSources(ALCcontext *Context); + #ifdef __cplusplus } #endif diff --git a/OpenAL32/alSource.c b/OpenAL32/alSource.c index f0ac5847..13cca8e3 100644 --- a/OpenAL32/alSource.c +++ b/OpenAL32/alSource.c @@ -2272,3 +2272,23 @@ static ALint GetByteOffset(ALsource *pSource) return lByteOffset; } + + +ALvoid ReleaseALSources(ALCcontext *Context) +{ +#ifdef _DEBUG + if(Context->SourceCount > 0) + AL_PRINT("exit() %d Source(s) NOT deleted\n", Context->SourceCount); +#endif + + while(Context->Source) + { + ALsource *temp = Context->Source; + Context->Source = Context->Source->next; + + // Release source structure + memset(temp, 0, sizeof(ALsource)); + free(temp); + } + Context->SourceCount = 0; +} |