From 0900c281a31df751d9a1faf832595558b74e5a92 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sun, 28 Aug 2011 18:17:06 -0700 Subject: [PATCH] Check if the context is valid only if it's replacing the current thread context --- Alc/ALc.c | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/Alc/ALc.c b/Alc/ALc.c index 0bdd61f5..cd2234a4 100644 --- a/Alc/ALc.c +++ b/Alc/ALc.c @@ -2236,27 +2236,26 @@ ALC_API ALCboolean ALC_APIENTRY alcMakeContextCurrent(ALCcontext *context) ALC_API ALCboolean ALC_APIENTRY alcSetThreadContext(ALCcontext *context) { ALboolean bReturn = AL_TRUE; - - LockLists(); + ALCcontext *old; // context must be a valid Context or NULL - if(context == NULL || IsContext(context)) + old = pthread_getspecific(LocalContext); + if(old != context) { - ALCcontext *old = pthread_getspecific(LocalContext); - if(old != context) + LockLists(); + if(context == NULL || IsContext(context)) { if(context) ALCcontext_IncRef(context); pthread_setspecific(LocalContext, context); if(old) ALCcontext_DecRef(old); } + else + { + alcSetError(NULL, ALC_INVALID_CONTEXT); + bReturn = AL_FALSE; + } + UnlockLists(); } - else - { - alcSetError(NULL, ALC_INVALID_CONTEXT); - bReturn = AL_FALSE; - } - - UnlockLists(); return bReturn; } -- 2.11.4.GIT