aboutsummaryrefslogtreecommitdiffstats
path: root/Alc
diff options
context:
space:
mode:
Diffstat (limited to 'Alc')
-rw-r--r--Alc/ALc.c12
-rw-r--r--Alc/midi/base.h2
-rw-r--r--Alc/midi/fluidsynth.c6
3 files changed, 14 insertions, 6 deletions
diff --git a/Alc/ALc.c b/Alc/ALc.c
index bb865542..a9f71032 100644
--- a/Alc/ALc.c
+++ b/Alc/ALc.c
@@ -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++)