Allow alThunkAddEntry to return a proper error
This commit is contained in:
@@ -12,7 +12,7 @@ extern "C" {
|
||||
|
||||
void alThunkInit(void);
|
||||
void alThunkExit(void);
|
||||
ALuint alThunkAddEntry(ALvoid *ptr);
|
||||
ALenum alThunkAddEntry(ALvoid *ptr, ALuint *idx);
|
||||
void alThunkRemoveEntry(ALuint index);
|
||||
ALvoid *alThunkLookupEntry(ALuint index);
|
||||
|
||||
@@ -20,7 +20,7 @@ ALvoid *alThunkLookupEntry(ALuint index);
|
||||
|
||||
#define ALTHUNK_INIT() alThunkInit()
|
||||
#define ALTHUNK_EXIT() alThunkExit()
|
||||
#define ALTHUNK_ADDENTRY(p) alThunkAddEntry(p)
|
||||
#define ALTHUNK_ADDENTRY(p,i) alThunkAddEntry(p,i)
|
||||
#define ALTHUNK_REMOVEENTRY(i) alThunkRemoveEntry(i)
|
||||
#define ALTHUNK_LOOKUPENTRY(i) alThunkLookupEntry(i)
|
||||
|
||||
@@ -28,7 +28,7 @@ ALvoid *alThunkLookupEntry(ALuint index);
|
||||
|
||||
#define ALTHUNK_INIT()
|
||||
#define ALTHUNK_EXIT()
|
||||
#define ALTHUNK_ADDENTRY(p) ((ALuint)p)
|
||||
#define ALTHUNK_ADDENTRY(p,i) ((*(i) = (ALuint)p),AL_NO_ERROR)
|
||||
#define ALTHUNK_REMOVEENTRY(i) ((ALvoid)i)
|
||||
#define ALTHUNK_LOOKUPENTRY(i) ((ALvoid*)(i))
|
||||
|
||||
|
||||
@@ -68,9 +68,9 @@ AL_API ALvoid AL_APIENTRY alGenAuxiliaryEffectSlots(ALsizei n, ALuint *effectslo
|
||||
break;
|
||||
}
|
||||
|
||||
slot->effectslot = (ALuint)ALTHUNK_ADDENTRY(slot);
|
||||
err = InsertUIntMapEntry(&Context->EffectSlotMap,
|
||||
slot->effectslot, slot);
|
||||
err = ALTHUNK_ADDENTRY(slot, &slot->effectslot);
|
||||
if(err == AL_NO_ERROR)
|
||||
err = InsertUIntMapEntry(&Context->EffectSlotMap, slot->effectslot, slot);
|
||||
if(err != AL_NO_ERROR)
|
||||
{
|
||||
ALTHUNK_REMOVEENTRY(slot->effectslot);
|
||||
|
||||
+3
-2
@@ -161,8 +161,9 @@ AL_API ALvoid AL_APIENTRY alGenBuffers(ALsizei n, ALuint *buffers)
|
||||
break;
|
||||
}
|
||||
|
||||
buffer->buffer = (ALuint)ALTHUNK_ADDENTRY(buffer);
|
||||
err = InsertUIntMapEntry(&device->BufferMap, buffer->buffer, buffer);
|
||||
err = ALTHUNK_ADDENTRY(buffer, &buffer->buffer);
|
||||
if(err == AL_NO_ERROR)
|
||||
err = InsertUIntMapEntry(&device->BufferMap, buffer->buffer, buffer);
|
||||
if(err != AL_NO_ERROR)
|
||||
{
|
||||
ALTHUNK_REMOVEENTRY(buffer->buffer);
|
||||
|
||||
+3
-2
@@ -63,8 +63,9 @@ AL_API ALvoid AL_APIENTRY alGenEffects(ALsizei n, ALuint *effects)
|
||||
break;
|
||||
}
|
||||
|
||||
effect->effect = ALTHUNK_ADDENTRY(effect);
|
||||
err = InsertUIntMapEntry(&device->EffectMap, effect->effect, effect);
|
||||
err = ALTHUNK_ADDENTRY(effect, &effect->effect);
|
||||
if(err == AL_NO_ERROR)
|
||||
err = InsertUIntMapEntry(&device->EffectMap, effect->effect, effect);
|
||||
if(err != AL_NO_ERROR)
|
||||
{
|
||||
ALTHUNK_REMOVEENTRY(effect->effect);
|
||||
|
||||
+3
-2
@@ -59,8 +59,9 @@ AL_API ALvoid AL_APIENTRY alGenFilters(ALsizei n, ALuint *filters)
|
||||
break;
|
||||
}
|
||||
|
||||
filter->filter = ALTHUNK_ADDENTRY(filter);
|
||||
err = InsertUIntMapEntry(&device->FilterMap, filter->filter, filter);
|
||||
err = ALTHUNK_ADDENTRY(filter, &filter->filter);
|
||||
if(err == AL_NO_ERROR)
|
||||
err = InsertUIntMapEntry(&device->FilterMap, filter->filter, filter);
|
||||
if(err != AL_NO_ERROR)
|
||||
{
|
||||
ALTHUNK_REMOVEENTRY(filter->filter);
|
||||
|
||||
+3
-3
@@ -86,9 +86,9 @@ AL_API ALvoid AL_APIENTRY alGenSources(ALsizei n,ALuint *sources)
|
||||
break;
|
||||
}
|
||||
|
||||
source->source = (ALuint)ALTHUNK_ADDENTRY(source);
|
||||
err = InsertUIntMapEntry(&Context->SourceMap, source->source,
|
||||
source);
|
||||
err = ALTHUNK_ADDENTRY(source, &source->source);
|
||||
if(err == AL_NO_ERROR)
|
||||
err = InsertUIntMapEntry(&Context->SourceMap, source->source, source);
|
||||
if(err != AL_NO_ERROR)
|
||||
{
|
||||
ALTHUNK_REMOVEENTRY(source->source);
|
||||
|
||||
+4
-3
@@ -50,7 +50,7 @@ void alThunkExit(void)
|
||||
DeleteCriticalSection(&g_ThunkLock);
|
||||
}
|
||||
|
||||
ALuint alThunkAddEntry(ALvoid *ptr)
|
||||
ALenum alThunkAddEntry(ALvoid *ptr, ALuint *idx)
|
||||
{
|
||||
ALuint index;
|
||||
|
||||
@@ -71,7 +71,7 @@ ALuint alThunkAddEntry(ALvoid *ptr)
|
||||
{
|
||||
LeaveCriticalSection(&g_ThunkLock);
|
||||
AL_PRINT("Realloc failed to increase to %u enties!\n", g_ThunkArraySize*2);
|
||||
return 0;
|
||||
return AL_OUT_OF_MEMORY;
|
||||
}
|
||||
memset(&NewList[g_ThunkArraySize], 0, g_ThunkArraySize*sizeof(ThunkEntry));
|
||||
g_ThunkArraySize *= 2;
|
||||
@@ -80,10 +80,11 @@ ALuint alThunkAddEntry(ALvoid *ptr)
|
||||
|
||||
g_ThunkArray[index].ptr = ptr;
|
||||
g_ThunkArray[index].InUse = AL_TRUE;
|
||||
*idx = index+1;
|
||||
|
||||
LeaveCriticalSection(&g_ThunkLock);
|
||||
|
||||
return index+1;
|
||||
return AL_NO_ERROR;
|
||||
}
|
||||
|
||||
void alThunkRemoveEntry(ALuint index)
|
||||
|
||||
Reference in New Issue
Block a user