diff options
Diffstat (limited to 'Alc')
-rw-r--r-- | Alc/ALc.c | 12 | ||||
-rw-r--r-- | Alc/midi/base.h | 2 | ||||
-rw-r--r-- | Alc/midi/fluidsynth.c | 6 |
3 files changed, 14 insertions, 6 deletions
@@ -1599,11 +1599,14 @@ void ALCcontext_DeferUpdates(ALCcontext *context) SetMixerFPUMode(&oldMode); V0(device->Backend,lock)(); - if(!ExchangeInt(&context->DeferUpdates, AL_TRUE)) + if(!context->DeferUpdates) { ALboolean UpdateSources; ALvoice *voice, *voice_end; ALeffectslot **slot, **slot_end; + + context->DeferUpdates = AL_TRUE; + /* Make sure all pending updates are performed */ UpdateSources = ATOMIC_EXCHANGE(ALenum, &context->UpdateSources, AL_FALSE); @@ -1649,10 +1652,12 @@ void ALCcontext_ProcessUpdates(ALCcontext *context) ALCdevice *device = context->Device; V0(device->Backend,lock)(); - if(ExchangeInt(&context->DeferUpdates, AL_FALSE)) + if(context->DeferUpdates) { ALsizei pos; + context->DeferUpdates = AL_FALSE; + LockUIntMapRead(&context->SourceMap); for(pos = 0;pos < context->SourceMap.size;pos++) { @@ -1667,7 +1672,8 @@ void ALCcontext_ProcessUpdates(ALCcontext *context) ReadUnlock(&Source->queue_lock); } - new_state = ExchangeInt(&Source->new_state, AL_NONE); + new_state = Source->new_state; + Source->new_state = AL_NONE; if(new_state) SetSourceState(Source, context, new_state); } diff --git a/Alc/midi/base.h b/Alc/midi/base.h index 157f2399..309e1a55 100644 --- a/Alc/midi/base.h +++ b/Alc/midi/base.h @@ -60,7 +60,7 @@ void MidiSynth_Destruct(MidiSynth *self); ALenum MidiSynth_selectSoundfonts(MidiSynth *self, ALCcontext *context, ALsizei count, const ALuint *ids); inline void MidiSynth_setGain(MidiSynth *self, ALfloat gain) { self->Gain = gain; } inline ALfloat MidiSynth_getGain(const MidiSynth *self) { return self->Gain; } -inline void MidiSynth_setState(MidiSynth *self, ALenum state) { ExchangeInt(&self->State, state); } +inline void MidiSynth_setState(MidiSynth *self, ALenum state) { self->State = state; } inline ALenum MidiSynth_getState(const MidiSynth *self) { return self->State; } void MidiSynth_stop(MidiSynth *self); inline void MidiSynth_reset(MidiSynth *self) { MidiSynth_stop(self); } diff --git a/Alc/midi/fluidsynth.c b/Alc/midi/fluidsynth.c index d08d4fb5..fbcd4353 100644 --- a/Alc/midi/fluidsynth.c +++ b/Alc/midi/fluidsynth.c @@ -716,8 +716,10 @@ static ALenum FSynth_selectSoundfonts(FSynth *self, ALCcontext *context, ALsizei else { ERR("Failed to allocate space for %d font IDs!\n", count); - fontid = ExchangePtr((XchgPtr*)&self->FontIDs, NULL); - count = ExchangeInt(&self->NumFontIDs, 0); + fontid = self->FontIDs; + count = self->NumFontIDs; + self->FontIDs = NULL; + self->NumFontIDs = 0; } for(i = 0;i < count;i++) |