aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Alc/midi/sf2load.c32
-rw-r--r--OpenAL32/alMidi.c5
2 files changed, 16 insertions, 21 deletions
diff --git a/Alc/midi/sf2load.c b/Alc/midi/sf2load.c
index 1733bab2..43f960c6 100644
--- a/Alc/midi/sf2load.c
+++ b/Alc/midi/sf2load.c
@@ -1322,35 +1322,25 @@ ALboolean loadSf2(Reader *stream, ALsoundfont *soundfont, ALCcontext *context)
GenModList_Destruct(&gzone);
IDList_Destruct(&fsids);
}
+ if(pids.ids_size > 0)
{
- ALsizei count = pids.ids_size;
- ALsfpreset **presets;
+ ALsfpreset **presets = NULL;
+ ALCdevice *device = context->Device;
- if(count == 0)
- presets = NULL;
- else
- {
- ALCdevice *device = context->Device;
-
- presets = calloc(count, sizeof(presets[0]));
- if(!presets)
- SET_ERROR_AND_GOTO(context, AL_OUT_OF_MEMORY, error);
+ presets = calloc(pids.ids_size, sizeof(presets[0]));
+ if(!presets)
+ SET_ERROR_AND_GOTO(context, AL_OUT_OF_MEMORY, error);
- for(i = 0;i < count;i++)
- {
- if(!(presets[i]=LookupPreset(device, pids.ids[i])))
- SET_ERROR_AND_GOTO(context, AL_INVALID_VALUE, error);
- }
+ for(i = 0;i < pids.ids_size;i++)
+ {
+ if(!(presets[i]=LookupPreset(device, pids.ids[i])))
+ SET_ERROR_AND_GOTO(context, AL_INVALID_VALUE, error);
}
- for(i = 0;i < count;i++)
+ for(i = 0;i < pids.ids_size;i++)
IncrementRef(&presets[i]->ref);
-
presets = ExchangePtr((XchgPtr*)&soundfont->Presets, presets);
- count = ExchangeInt(&soundfont->NumPresets, count);
- for(i = 0;i < count;i++)
- DecrementRef(&presets[i]->ref);
free(presets);
}
diff --git a/OpenAL32/alMidi.c b/OpenAL32/alMidi.c
index 17384bcf..3bf0acc4 100644
--- a/OpenAL32/alMidi.c
+++ b/OpenAL32/alMidi.c
@@ -86,6 +86,11 @@ AL_API void AL_APIENTRY alLoadSoundfontSOFT(ALuint id, size_t(*cb)(ALvoid*,size_
WriteUnlock(&sfont->Lock);
SET_ERROR_AND_GOTO(context, AL_INVALID_OPERATION, done);
}
+ if(sfont->NumPresets > 0)
+ {
+ WriteUnlock(&sfont->Lock);
+ SET_ERROR_AND_GOTO(context, AL_INVALID_OPERATION, done);
+ }
reader.cb = cb;
reader.ptr = user;