From 9080d5fda03d16143e2a446df72fe16d94a40c59 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Fri, 2 Sep 2011 02:57:21 -0700 Subject: Do an atomic compare-exchange on the global context when destroying a context --- Alc/ALc.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) (limited to 'Alc/ALc.c') diff --git a/Alc/ALc.c b/Alc/ALc.c index df2ba12c..6ce6feaa 100644 --- a/Alc/ALc.c +++ b/Alc/ALc.c @@ -2147,17 +2147,14 @@ ALC_API ALCvoid ALC_APIENTRY alcDestroyContext(ALCcontext *context) } UnlockDevice(Device); + if(CompExchangePtr((void**)&GlobalContext, context, NULL)) + ALCcontext_DecRef(context); + if(Device->NumContexts == 0) { ALCdevice_StopPlayback(Device); Device->Flags &= ~DEVICE_RUNNING; } - - if(GlobalContext == context) - { - GlobalContext = NULL; - ALCcontext_DecRef(context); - } UnlockLists(); ALCcontext_DecRef(context); -- cgit v1.2.3