Remove the context from being current before removing it from the device
This commit is contained in:
@@ -1467,6 +1467,19 @@ static void ReleaseContext(ALCcontext *context, ALCdevice *device)
|
||||
{
|
||||
ALCcontext *volatile*tmp_ctx;
|
||||
|
||||
if(pthread_getspecific(LocalContext) == context)
|
||||
{
|
||||
WARN("%p released while current on thread\n", context);
|
||||
pthread_setspecific(LocalContext, NULL);
|
||||
ALCcontext_DecRef(context);
|
||||
}
|
||||
|
||||
if(CompExchangePtr((void**)&GlobalContext, context, NULL))
|
||||
{
|
||||
WARN("%p released while current\n", context);
|
||||
ALCcontext_DecRef(context);
|
||||
}
|
||||
|
||||
tmp_ctx = &device->ContextList;
|
||||
while(*tmp_ctx)
|
||||
{
|
||||
@@ -1484,19 +1497,6 @@ static void ReleaseContext(ALCcontext *context, ALCdevice *device)
|
||||
* efficient way of doing this. */
|
||||
UnlockDevice(device);
|
||||
|
||||
if(pthread_getspecific(LocalContext) == context)
|
||||
{
|
||||
WARN("%p released while current on thread\n", context);
|
||||
pthread_setspecific(LocalContext, NULL);
|
||||
ALCcontext_DecRef(context);
|
||||
}
|
||||
|
||||
if(CompExchangePtr((void**)&GlobalContext, context, NULL))
|
||||
{
|
||||
WARN("%p released while current\n", context);
|
||||
ALCcontext_DecRef(context);
|
||||
}
|
||||
|
||||
ALCcontext_DecRef(context);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user