Get rid of IsContext
This commit is contained in:
parent
780417ba39
commit
25e86e8e91
136
Alc/ALc.c
136
Alc/ALc.c
@ -1024,31 +1024,6 @@ static ALCboolean IsValidALCChannels(ALCenum channels)
|
|||||||
return ALC_FALSE;
|
return ALC_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* IsContext
|
|
||||||
*
|
|
||||||
* Check if the context pointer is valid (caller is responsible for holding the
|
|
||||||
* list lock).
|
|
||||||
*/
|
|
||||||
static ALCboolean IsContext(ALCcontext *context)
|
|
||||||
{
|
|
||||||
ALCdevice *tmp_dev;
|
|
||||||
|
|
||||||
tmp_dev = g_pDeviceList;
|
|
||||||
while(tmp_dev)
|
|
||||||
{
|
|
||||||
ALCcontext *tmp_ctx = tmp_dev->ContextList;
|
|
||||||
while(tmp_ctx)
|
|
||||||
{
|
|
||||||
if(tmp_ctx == context)
|
|
||||||
return ALC_TRUE;
|
|
||||||
tmp_ctx = tmp_ctx->next;
|
|
||||||
}
|
|
||||||
tmp_dev = tmp_dev->next;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ALC_FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* UpdateDeviceParams
|
/* UpdateDeviceParams
|
||||||
*
|
*
|
||||||
@ -1546,6 +1521,36 @@ static void ReleaseThreadCtx(void *ptr)
|
|||||||
ALCcontext_DecRef(ptr);
|
ALCcontext_DecRef(ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* VerifyContext
|
||||||
|
*
|
||||||
|
* Checks that the given context is valid, and increments its reference count.
|
||||||
|
*/
|
||||||
|
static ALCcontext *VerifyContext(ALCcontext *context)
|
||||||
|
{
|
||||||
|
ALCdevice *dev;
|
||||||
|
|
||||||
|
LockLists();
|
||||||
|
dev = g_pDeviceList;
|
||||||
|
while(dev)
|
||||||
|
{
|
||||||
|
ALCcontext *tmp_ctx = dev->ContextList;
|
||||||
|
while(tmp_ctx)
|
||||||
|
{
|
||||||
|
if(tmp_ctx == context)
|
||||||
|
{
|
||||||
|
ALCcontext_IncRef(tmp_ctx);
|
||||||
|
UnlockLists();
|
||||||
|
return tmp_ctx;
|
||||||
|
}
|
||||||
|
tmp_ctx = tmp_ctx->next;
|
||||||
|
}
|
||||||
|
dev = dev->next;
|
||||||
|
}
|
||||||
|
UnlockLists();
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
ALCvoid LockContext(ALCcontext *context)
|
ALCvoid LockContext(ALCcontext *context)
|
||||||
{
|
{
|
||||||
@ -2312,34 +2317,23 @@ ALC_API ALCcontext* ALC_APIENTRY alcGetThreadContext(void)
|
|||||||
*/
|
*/
|
||||||
ALC_API ALCboolean ALC_APIENTRY alcMakeContextCurrent(ALCcontext *context)
|
ALC_API ALCboolean ALC_APIENTRY alcMakeContextCurrent(ALCcontext *context)
|
||||||
{
|
{
|
||||||
ALboolean bReturn = AL_TRUE;
|
/* context must be a valid Context or NULL */
|
||||||
|
if(context && !(context=VerifyContext(context)))
|
||||||
LockLists();
|
|
||||||
|
|
||||||
// context must be a valid Context or NULL
|
|
||||||
if(context == NULL || IsContext(context))
|
|
||||||
{
|
|
||||||
ALCcontext *old;
|
|
||||||
|
|
||||||
if(context) ALCcontext_IncRef(context);
|
|
||||||
old = ExchangePtr((void**)&GlobalContext, context);
|
|
||||||
if(old) ALCcontext_DecRef(old);
|
|
||||||
|
|
||||||
if((old=pthread_getspecific(LocalContext)) != NULL)
|
|
||||||
{
|
|
||||||
pthread_setspecific(LocalContext, NULL);
|
|
||||||
ALCcontext_DecRef(old);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
alcSetError(NULL, ALC_INVALID_CONTEXT);
|
alcSetError(NULL, ALC_INVALID_CONTEXT);
|
||||||
bReturn = AL_FALSE;
|
return ALC_FALSE;
|
||||||
|
}
|
||||||
|
/* context's reference count is already incremented */
|
||||||
|
context = ExchangePtr((void**)&GlobalContext, context);
|
||||||
|
if(context) ALCcontext_DecRef(context);
|
||||||
|
|
||||||
|
if((context=pthread_getspecific(LocalContext)) != NULL)
|
||||||
|
{
|
||||||
|
pthread_setspecific(LocalContext, NULL);
|
||||||
|
ALCcontext_DecRef(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
UnlockLists();
|
return ALC_TRUE;
|
||||||
|
|
||||||
return bReturn;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* alcSetThreadContext
|
/* alcSetThreadContext
|
||||||
@ -2348,29 +2342,20 @@ ALC_API ALCboolean ALC_APIENTRY alcMakeContextCurrent(ALCcontext *context)
|
|||||||
*/
|
*/
|
||||||
ALC_API ALCboolean ALC_APIENTRY alcSetThreadContext(ALCcontext *context)
|
ALC_API ALCboolean ALC_APIENTRY alcSetThreadContext(ALCcontext *context)
|
||||||
{
|
{
|
||||||
ALboolean bReturn = AL_TRUE;
|
|
||||||
ALCcontext *old;
|
ALCcontext *old;
|
||||||
|
|
||||||
// context must be a valid Context or NULL
|
/* context must be a valid Context or NULL */
|
||||||
old = pthread_getspecific(LocalContext);
|
if(context && !(context=VerifyContext(context)))
|
||||||
if(old != context)
|
|
||||||
{
|
{
|
||||||
LockLists();
|
alcSetError(NULL, ALC_INVALID_CONTEXT);
|
||||||
if(context == NULL || IsContext(context))
|
return ALC_FALSE;
|
||||||
{
|
|
||||||
if(context) ALCcontext_IncRef(context);
|
|
||||||
pthread_setspecific(LocalContext, context);
|
|
||||||
if(old) ALCcontext_DecRef(old);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
alcSetError(NULL, ALC_INVALID_CONTEXT);
|
|
||||||
bReturn = AL_FALSE;
|
|
||||||
}
|
|
||||||
UnlockLists();
|
|
||||||
}
|
}
|
||||||
|
/* context's reference count is already incremented */
|
||||||
|
old = pthread_getspecific(LocalContext);
|
||||||
|
pthread_setspecific(LocalContext, context);
|
||||||
|
if(old) ALCcontext_DecRef(old);
|
||||||
|
|
||||||
return bReturn;
|
return ALC_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2378,18 +2363,19 @@ ALC_API ALCboolean ALC_APIENTRY alcSetThreadContext(ALCcontext *context)
|
|||||||
*
|
*
|
||||||
* Returns the Device that a particular Context is attached to
|
* Returns the Device that a particular Context is attached to
|
||||||
*/
|
*/
|
||||||
ALC_API ALCdevice* ALC_APIENTRY alcGetContextsDevice(ALCcontext *pContext)
|
ALC_API ALCdevice* ALC_APIENTRY alcGetContextsDevice(ALCcontext *Context)
|
||||||
{
|
{
|
||||||
ALCdevice *pDevice = NULL;
|
ALCdevice *Device;
|
||||||
|
|
||||||
LockLists();
|
if(!(Context=VerifyContext(Context)))
|
||||||
if(IsContext(pContext))
|
{
|
||||||
pDevice = pContext->Device;
|
|
||||||
else
|
|
||||||
alcSetError(NULL, ALC_INVALID_CONTEXT);
|
alcSetError(NULL, ALC_INVALID_CONTEXT);
|
||||||
UnlockLists();
|
return NULL;
|
||||||
|
}
|
||||||
|
Device = Context->Device;
|
||||||
|
ALCcontext_DecRef(Context);
|
||||||
|
|
||||||
return pDevice;
|
return Device;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user