aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Alc/mixvoice.cpp3
-rw-r--r--OpenAL32/alAuxEffectSlot.cpp1
-rw-r--r--OpenAL32/alSource.cpp18
3 files changed, 12 insertions, 10 deletions
diff --git a/Alc/mixvoice.cpp b/Alc/mixvoice.cpp
index fdff0eca..d19a4861 100644
--- a/Alc/mixvoice.cpp
+++ b/Alc/mixvoice.cpp
@@ -482,7 +482,8 @@ ALboolean MixSource(ALvoice *voice, ALuint SourceID, ALCcontext *Context, ALsize
ALsizei CompLen{0};
auto load_buffer = [pos,&SrcData,NumChannels,SampleSize,chan,FilledAmt,SizeToDo,&CompLen](const ALbuffer *buffer) -> void
{
- ALsizei DataSize{buffer ? buffer->SampleLen : 0};
+ if(!buffer) return;
+ ALsizei DataSize{buffer->SampleLen};
if(pos >= DataSize) return;
DataSize = mini(SizeToDo, DataSize - pos);
diff --git a/OpenAL32/alAuxEffectSlot.cpp b/OpenAL32/alAuxEffectSlot.cpp
index 7f05187e..ad33fe50 100644
--- a/OpenAL32/alAuxEffectSlot.cpp
+++ b/OpenAL32/alAuxEffectSlot.cpp
@@ -577,6 +577,7 @@ void EffectState::DecRef() noexcept
ALenum InitEffectSlot(ALeffectslot *slot)
{
EffectStateFactory *factory{getFactoryByType(slot->Effect.Type)};
+ if(!factory) return AL_INVALID_VALUE;
slot->Effect.State = factory->create();
if(!slot->Effect.State) return AL_OUT_OF_MEMORY;
diff --git a/OpenAL32/alSource.cpp b/OpenAL32/alSource.cpp
index 4cc3526b..463d2438 100644
--- a/OpenAL32/alSource.cpp
+++ b/OpenAL32/alSource.cpp
@@ -2977,11 +2977,11 @@ AL_API ALvoid AL_APIENTRY alSourceQueueBuffers(ALuint src, ALsizei nb, const ALu
std::lock_guard<std::mutex> _{context->SourceLock};
ALsource *source{LookupSource(context.get(),src)};
- if(!source)
+ if(UNLIKELY(!source))
SETERR_RETURN(context.get(), AL_INVALID_NAME,, "Invalid source ID %u", src);
/* Can't queue on a Static Source */
- if(source->SourceType == AL_STATIC)
+ if(UNLIKELY(source->SourceType == AL_STATIC))
SETERR_RETURN(context.get(), AL_INVALID_OPERATION,, "Queueing onto static source %u", src);
/* Check for a valid Buffer, for its frequency and format */
@@ -3094,11 +3094,11 @@ AL_API void AL_APIENTRY alSourceQueueBufferLayersSOFT(ALuint src, ALsizei nb, co
std::lock_guard<std::mutex> _{context->SourceLock};
ALsource *source{LookupSource(context.get(),src)};
- if(!source)
+ if(UNLIKELY(!source))
SETERR_RETURN(context.get(), AL_INVALID_NAME,, "Invalid source ID %u", src);
/* Can't queue on a Static Source */
- if(source->SourceType == AL_STATIC)
+ if(UNLIKELY(source->SourceType == AL_STATIC))
SETERR_RETURN(context.get(), AL_INVALID_OPERATION,, "Queueing onto static source %u", src);
/* Check for a valid Buffer, for its frequency and format */
@@ -3202,12 +3202,12 @@ AL_API ALvoid AL_APIENTRY alSourceUnqueueBuffers(ALuint src, ALsizei nb, ALuint
std::lock_guard<std::mutex> _{context->SourceLock};
ALsource *source{LookupSource(context.get(),src)};
- if(!source)
+ if(UNLIKELY(!source))
SETERR_RETURN(context.get(), AL_INVALID_NAME,, "Invalid source ID %u", src);
- if(source->Looping)
+ if(UNLIKELY(source->Looping))
SETERR_RETURN(context.get(), AL_INVALID_VALUE,, "Unqueueing from looping source %u", src);
- if(source->SourceType != AL_STREAMING)
+ if(UNLIKELY(source->SourceType != AL_STREAMING))
SETERR_RETURN(context.get(), AL_INVALID_VALUE,,
"Unqueueing from a non-streaming source %u", src);
@@ -3219,7 +3219,7 @@ AL_API ALvoid AL_APIENTRY alSourceUnqueueBuffers(ALuint src, ALsizei nb, ALuint
Current = voice->current_buffer.load(std::memory_order_relaxed);
else if(source->state == AL_INITIAL)
Current = BufferList;
- if(BufferList == Current)
+ if(UNLIKELY(BufferList == Current))
SETERR_RETURN(context.get(), AL_INVALID_VALUE,, "Unqueueing pending buffers");
ALsizei i{BufferList->num_buffers};
@@ -3229,7 +3229,7 @@ AL_API ALvoid AL_APIENTRY alSourceUnqueueBuffers(ALuint src, ALsizei nb, ALuint
* trying to unqueue pending buffers.
*/
ALbufferlistitem *next{BufferList->next.load(std::memory_order_relaxed)};
- if(!next || next == Current)
+ if(UNLIKELY(!next) || UNLIKELY(next == Current))
SETERR_RETURN(context.get(), AL_INVALID_VALUE,, "Unqueueing pending buffers");
BufferList = next;