From 69b10e2d7c4817bca90b175b2d43609ff97686a9 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Mon, 12 Sep 2011 03:35:21 -0700 Subject: [PATCH] Remove the context from being current before removing it from the device --- Alc/ALc.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/Alc/ALc.c b/Alc/ALc.c index 3ba020f5..a6787df6 100644 --- a/Alc/ALc.c +++ b/Alc/ALc.c @@ -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); }