aboutsummaryrefslogtreecommitdiffstats
path: root/Alc/ALc.c
diff options
context:
space:
mode:
Diffstat (limited to 'Alc/ALc.c')
-rw-r--r--Alc/ALc.c11
1 files changed, 2 insertions, 9 deletions
diff --git a/Alc/ALc.c b/Alc/ALc.c
index a9b8a84c..e39ca2e7 100644
--- a/Alc/ALc.c
+++ b/Alc/ALc.c
@@ -1463,21 +1463,14 @@ static void ReleaseContext(ALCcontext *context, ALCdevice *device)
ALCcontext_DecRef(context);
}
+ LockDevice(device);
tmp_ctx = &device->ContextList;
while(*tmp_ctx)
{
- if(*tmp_ctx == context)
- {
- *tmp_ctx = context->next;
+ if(CompExchangePtr((XchgPtr*)tmp_ctx, context, context->next))
break;
- }
tmp_ctx = &(*tmp_ctx)->next;
}
-
- LockDevice(device);
- /* Lock the device to make sure the mixer is not using the contexts in the
- * list before we go about deleting this one. There should be a more
- * efficient way of doing this. */
UnlockDevice(device);
ALCcontext_DecRef(context);