From 8eaa9bb4691dbd479236771064b958bedcdab145 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Mon, 29 Aug 2011 19:44:40 -0700 Subject: Manually lock the map while iterating through its contents --- OpenAL32/alState.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'OpenAL32/alState.c') diff --git a/OpenAL32/alState.c b/OpenAL32/alState.c index 841f6f31..424a73f6 100644 --- a/OpenAL32/alState.c +++ b/OpenAL32/alState.c @@ -610,12 +610,14 @@ AL_API ALvoid AL_APIENTRY alDeferUpdatesSOFT(void) src++; } + ReadLock(&Context->EffectSlotMap.lock); for(e = 0;e < Context->EffectSlotMap.size;e++) { ALEffectSlot = Context->EffectSlotMap.array[e].value; if(Exchange_ALenum(&ALEffectSlot->NeedsUpdate, AL_FALSE)) ALEffect_Update(ALEffectSlot->EffectState, Context, ALEffectSlot); } + ReadUnlock(&Context->EffectSlotMap.lock); UnlockContext(Context); } @@ -634,6 +636,7 @@ AL_API ALvoid AL_APIENTRY alProcessUpdatesSOFT(void) ALsizei pos; LockContext(Context); + ReadLock(&Context->SourceMap.lock); for(pos = 0;pos < Context->SourceMap.size;pos++) { ALsource *Source = Context->SourceMap.array[pos].value; @@ -646,6 +649,7 @@ AL_API ALvoid AL_APIENTRY alProcessUpdatesSOFT(void) if(new_state) SetSourceState(Source, Context, new_state); } + ReadUnlock(&Context->SourceMap.lock); UnlockContext(Context); } -- cgit v1.2.3