From 5500ed9209be44fc42b7f2eae0e49ebdb84e43b5 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sun, 1 Jan 2012 15:22:58 -0800 Subject: Use the device lock when removing the context from the device's list --- Alc/ALc.c | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) (limited to 'Alc/ALc.c') 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); -- cgit v1.2.3