From 2b020040b41a8a8a19869263ad2816daad2e1361 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sat, 18 Aug 2012 14:49:42 -0700 Subject: [PATCH] Keep the backend device open until the last reference is released This should generally happen with the next ALCdevice_DecRef call unless the device is in the middle of being used in another thread, in which case it's probably best to not remove the resources. --- Alc/ALc.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Alc/ALc.c b/Alc/ALc.c index 0fb87fad..f72122f3 100644 --- a/Alc/ALc.c +++ b/Alc/ALc.c @@ -1686,6 +1686,11 @@ static ALCvoid FreeDevice(ALCdevice *device) { TRACE("%p\n", device); + if(device->Type != Capture) + ALCdevice_ClosePlayback(device); + else + ALCdevice_CloseCapture(device); + if(device->DefaultSlot) { ALeffectState_Destroy(device->DefaultSlot->EffectState); @@ -2856,8 +2861,6 @@ ALC_API ALCboolean ALC_APIENTRY alcCloseDevice(ALCdevice *Device) ALCdevice_StopPlayback(Device); Device->Flags &= ~DEVICE_RUNNING; - ALCdevice_ClosePlayback(Device); - ALCdevice_DecRef(Device); return ALC_TRUE; @@ -2962,8 +2965,6 @@ ALC_API ALCboolean ALC_APIENTRY alcCaptureCloseDevice(ALCdevice *Device) *list = (*list)->next; UnlockLists(); - ALCdevice_CloseCapture(Device); - ALCdevice_DecRef(Device); return ALC_TRUE; -- 2.11.4.GIT