summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Robinson <[email protected]>2008-01-14 10:54:33 -0800
committerChris Robinson <[email protected]>2008-01-14 10:54:33 -0800
commit7a4870bd97aa568ca35d405442b1a27b58f844e5 (patch)
tree8c2892afb56b2324c36920152d73d9bc9fb24fdf
parenta552e32a9aa878c342582b2b10eecb29eaa00582 (diff)
Close dangling devices when exiting
-rw-r--r--Alc/ALc.c22
-rw-r--r--OpenAL32/Include/alMain.h2
-rw-r--r--OpenAL32/OpenAL32.c2
3 files changed, 26 insertions, 0 deletions
diff --git a/Alc/ALc.c b/Alc/ALc.c
index c8d5f0bc..3ae5c902 100644
--- a/Alc/ALc.c
+++ b/Alc/ALc.c
@@ -1239,4 +1239,26 @@ ALCAPI ALCboolean ALCAPIENTRY alcCloseDevice(ALCdevice *pDevice)
return bReturn;
}
+
+
+ALCvoid ReleaseALC(ALCvoid)
+{
+ ALCdevice *Dev;
+
+#ifdef _DEBUG
+ if(g_ulContextCount > 0)
+ AL_PRINT("exit() %u device(s) and %u context(s) NOT deleted\n", g_ulDeviceCount, g_ulContextCount);
+#endif
+
+ while(g_pDeviceList)
+ {
+ Dev = g_pDeviceList;
+ g_pDeviceList = g_pDeviceList->next;
+ if(Dev->IsCaptureDevice)
+ alcCaptureCloseDevice(Dev);
+ else
+ alcCloseDevice(Dev);
+ }
+}
+
///////////////////////////////////////////////////////
diff --git a/OpenAL32/Include/alMain.h b/OpenAL32/Include/alMain.h
index d1acfc11..bd3b00be 100644
--- a/OpenAL32/Include/alMain.h
+++ b/OpenAL32/Include/alMain.h
@@ -216,6 +216,8 @@ struct ALCcontext_struct
ALCcontext *next;
};
+ALCvoid ReleaseALC(ALCvoid);
+
ALCchar *AppendDeviceList(char *name);
ALCchar *AppendAllDeviceList(char *name);
ALCchar *AppendCaptureDeviceList(char *name);
diff --git a/OpenAL32/OpenAL32.c b/OpenAL32/OpenAL32.c
index fa5a9d71..a49f5b29 100644
--- a/OpenAL32/OpenAL32.c
+++ b/OpenAL32/OpenAL32.c
@@ -44,6 +44,7 @@ BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
ReleaseALAuxiliaryEffectSlots();
ReleaseALEffects();
ReleaseALFilters();
+ ReleaseALC();
FreeALConfig();
ALTHUNK_EXIT();
DeleteCriticalSection(&_alMutex);
@@ -64,6 +65,7 @@ static void my_deinit()
ReleaseALAuxiliaryEffectSlots();
ReleaseALEffects();
ReleaseALFilters();
+ ReleaseALC();
FreeALConfig();
ALTHUNK_EXIT();
DeleteCriticalSection(&_alMutex);