Remove the context from being current before removing it from the device

This commit is contained in:
Chris Robinson
2011-09-12 03:35:21 -07:00
parent 25e86e8e91
commit 69b10e2d7c
+13 -13
View File
@@ -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);
}