ALbuffer *NewBuffer(ALCcontext *context) { ALCdevice *device = context->Device; ALbuffer *buffer; ALenum err; buffer = calloc(1, sizeof(ALbuffer)); if(!buffer) SET_ERROR_AND_RETURN_VALUE(context, AL_OUT_OF_MEMORY, NULL); RWLockInit(&buffer->lock); err = NewThunkEntry(&buffer->id); if(err == AL_NO_ERROR) err = InsertUIntMapEntry(&device->BufferMap, buffer->id, buffer); if(err != AL_NO_ERROR) { FreeThunkEntry(buffer->id); memset(buffer, 0, sizeof(ALbuffer)); free(buffer); SET_ERROR_AND_RETURN_VALUE(context, err, NULL); } return buffer; }
ALsfpreset *NewPreset(ALCcontext *context) { ALCdevice *device = context->Device; ALsfpreset *preset; ALenum err; preset = calloc(1, sizeof(*preset)); if(!preset) SET_ERROR_AND_RETURN_VALUE(context, AL_OUT_OF_MEMORY, NULL); ALsfpreset_Construct(preset); err = NewThunkEntry(&preset->id); if(err == AL_NO_ERROR) err = InsertUIntMapEntry(&device->PresetMap, preset->id, preset); if(err != AL_NO_ERROR) { ALsfpreset_Destruct(preset); memset(preset, 0, sizeof(*preset)); free(preset); SET_ERROR_AND_RETURN_VALUE(context, err, NULL); } return preset; }