diff options
author | Chris Robinson <[email protected]> | 2011-08-30 20:33:47 -0700 |
---|---|---|
committer | Chris Robinson <[email protected]> | 2011-08-30 20:33:47 -0700 |
commit | 0a1321aaaee411393c27c9b4836e4190f3b7e421 (patch) | |
tree | b2233a9364da4474c2890e43a1f0657f62446984 /Alc | |
parent | 189add1d5a5b1f9f55fba63937f3d92cddc0cea2 (diff) |
Add a limit to the UIntMap size and use it for sources and effect slots
Diffstat (limited to 'Alc')
-rw-r--r-- | Alc/ALc.c | 18 | ||||
-rw-r--r-- | Alc/helpers.c | 9 |
2 files changed, 17 insertions, 10 deletions
@@ -429,7 +429,7 @@ BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved) switch(ul_reason_for_call) { case DLL_PROCESS_ATTACH: - InitUIntMap(&TlsDestructor); + InitUIntMap(&TlsDestructor, ~0); alc_init(); break; @@ -1322,8 +1322,8 @@ static ALvoid InitContext(ALCcontext *pContext) pContext->LastError = AL_NO_ERROR; pContext->UpdateSources = AL_FALSE; pContext->ActiveSourceCount = 0; - InitUIntMap(&pContext->SourceMap); - InitUIntMap(&pContext->EffectSlotMap); + InitUIntMap(&pContext->SourceMap, pContext->Device->MaxNoOfSources); + InitUIntMap(&pContext->EffectSlotMap, pContext->Device->AuxiliaryEffectSlotMax); //Set globals pContext->DistanceModel = AL_INVERSE_DISTANCE_CLAMPED; @@ -2446,9 +2446,9 @@ ALC_API ALCdevice* ALC_APIENTRY alcOpenDevice(const ALCchar *deviceName) device->ContextList = NULL; device->NumContexts = 0; - InitUIntMap(&device->BufferMap); - InitUIntMap(&device->EffectMap); - InitUIntMap(&device->FilterMap); + InitUIntMap(&device->BufferMap, ~0); + InitUIntMap(&device->EffectMap, ~0); + InitUIntMap(&device->FilterMap, ~0); //Set output format if(ConfigValueExists(NULL, "frequency")) @@ -2608,9 +2608,9 @@ ALC_API ALCdevice* ALC_APIENTRY alcLoopbackOpenDeviceSOFT(void) device->ContextList = NULL; device->NumContexts = 0; - InitUIntMap(&device->BufferMap); - InitUIntMap(&device->EffectMap); - InitUIntMap(&device->FilterMap); + InitUIntMap(&device->BufferMap, ~0); + InitUIntMap(&device->EffectMap, ~0); + InitUIntMap(&device->FilterMap, ~0); //Set output format device->Frequency = 44100; diff --git a/Alc/helpers.c b/Alc/helpers.c index 8aa13111..989602f7 100644 --- a/Alc/helpers.c +++ b/Alc/helpers.c @@ -308,11 +308,12 @@ void WriteUnlock(RWLock *lock) } -void InitUIntMap(UIntMap *map) +void InitUIntMap(UIntMap *map, ALsizei limit) { map->array = NULL; map->size = 0; map->maxsize = 0; + map->limit = limit; map->lock.read_count = 0; map->lock.write_count = 0; map->lock.read_lock = AL_FALSE; @@ -335,6 +336,12 @@ ALenum InsertUIntMapEntry(UIntMap *map, ALuint key, ALvoid *value) ALsizei pos = 0; WriteLock(&map->lock); + if(map->size == map->limit) + { + WriteUnlock(&map->lock); + return AL_OUT_OF_MEMORY; + } + if(map->size > 0) { ALsizei low = 0; |