Check the effect slot list size only when there's no free entries
The list can contain (reuable) NULL entries, so the max - current_size doesn't indicate how many can be allocated.
This commit is contained in:
parent
db452a19da
commit
a6734c7a91
@ -122,12 +122,6 @@ AL_API ALvoid AL_APIENTRY alGenAuxiliaryEffectSlots(ALsizei n, ALuint *effectslo
|
|||||||
|
|
||||||
LockEffectSlotList(context);
|
LockEffectSlotList(context);
|
||||||
device = context->Device;
|
device = context->Device;
|
||||||
if(device->AuxiliaryEffectSlotMax - VECTOR_SIZE(context->EffectSlotList) < (ALuint)n)
|
|
||||||
{
|
|
||||||
UnlockEffectSlotList(context);
|
|
||||||
SETERR_GOTO(context, AL_OUT_OF_MEMORY, done, "Exceeding %u auxiliary effect slot limit",
|
|
||||||
device->AuxiliaryEffectSlotMax);
|
|
||||||
}
|
|
||||||
for(cur = 0;cur < n;cur++)
|
for(cur = 0;cur < n;cur++)
|
||||||
{
|
{
|
||||||
ALeffectslotPtr *iter = VECTOR_BEGIN(context->EffectSlotList);
|
ALeffectslotPtr *iter = VECTOR_BEGIN(context->EffectSlotList);
|
||||||
@ -142,6 +136,13 @@ AL_API ALvoid AL_APIENTRY alGenAuxiliaryEffectSlots(ALsizei n, ALuint *effectslo
|
|||||||
}
|
}
|
||||||
if(iter == end)
|
if(iter == end)
|
||||||
{
|
{
|
||||||
|
if(device->AuxiliaryEffectSlotMax == VECTOR_SIZE(context->EffectSlotList))
|
||||||
|
{
|
||||||
|
UnlockEffectSlotList(context);
|
||||||
|
alDeleteAuxiliaryEffectSlots(cur, effectslots);
|
||||||
|
SETERR_GOTO(context, AL_OUT_OF_MEMORY, done,
|
||||||
|
"Exceeding %u auxiliary effect slot limit", device->AuxiliaryEffectSlotMax);
|
||||||
|
}
|
||||||
VECTOR_PUSH_BACK(context->EffectSlotList, NULL);
|
VECTOR_PUSH_BACK(context->EffectSlotList, NULL);
|
||||||
iter = &VECTOR_BACK(context->EffectSlotList);
|
iter = &VECTOR_BACK(context->EffectSlotList);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user