diff options
author | Chris Robinson <[email protected]> | 2011-08-28 18:17:06 -0700 |
---|---|---|
committer | Chris Robinson <[email protected]> | 2011-08-28 18:17:06 -0700 |
commit | 0900c281a31df751d9a1faf832595558b74e5a92 (patch) | |
tree | 791359d2d4bfefa22606cefa7b7d77b018cb8541 /Alc/ALc.c | |
parent | f8c4b16c30743088e0ab9fd7219432a12983fafa (diff) |
Check if the context is valid only if it's replacing the current thread context
Diffstat (limited to 'Alc/ALc.c')
-rw-r--r-- | Alc/ALc.c | 23 |
1 files changed, 11 insertions, 12 deletions
@@ -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; } |