diff --git a/stepmania/src/arch/Sound/ALSA9Dynamic.cpp b/stepmania/src/arch/Sound/ALSA9Dynamic.cpp index dcb1c3a30c..5be8937e8d 100644 --- a/stepmania/src/arch/Sound/ALSA9Dynamic.cpp +++ b/stepmania/src/arch/Sound/ALSA9Dynamic.cpp @@ -43,15 +43,14 @@ CString LoadALSA() return ""; error: UnloadALSA(); - if( Handle ) - dlclose( Handle ); - Handle = NULL; return error; } void UnloadALSA() { - dlclose( Handle ); + if( Handle ) + dlclose( Handle ); + Handle = NULL; #define FUNC(ret, name, proto) d##name = NULL; #include "ALSA9Functions.h" #undef FUNC diff --git a/stepmania/src/arch/Sound/RageSoundDriver_ALSA9.cpp b/stepmania/src/arch/Sound/RageSoundDriver_ALSA9.cpp index 798c066445..2b1e9ad7b4 100644 --- a/stepmania/src/arch/Sound/RageSoundDriver_ALSA9.cpp +++ b/stepmania/src/arch/Sound/RageSoundDriver_ALSA9.cpp @@ -214,7 +214,7 @@ RageSound_ALSA9::RageSound_ALSA9() CString err = LoadALSA(); if( err != "" ) RageException::ThrowNonfatal("Driver unusable: %s", err.c_str()); - +try { shutdown = false; /* Create a bunch of streams and put them into the stream pool. */ @@ -249,6 +249,10 @@ RageSound_ALSA9::RageSound_ALSA9() MixingThread.SetName( "RageSound_ALSA9" ); MixingThread.Create( MixerThread_start, this ); +} catch(...) { + UnloadALSA(); + throw; +} } RageSound_ALSA9::~RageSound_ALSA9() diff --git a/stepmania/src/arch/Sound/RageSoundDriver_ALSA9_Software.cpp b/stepmania/src/arch/Sound/RageSoundDriver_ALSA9_Software.cpp index 06581a01cc..3851512857 100644 --- a/stepmania/src/arch/Sound/RageSoundDriver_ALSA9_Software.cpp +++ b/stepmania/src/arch/Sound/RageSoundDriver_ALSA9_Software.cpp @@ -183,7 +183,7 @@ RageSound_ALSA9_Software::RageSound_ALSA9_Software() CString err = LoadALSA(); if( err != "" ) RageException::ThrowNonfatal("Driver unusable: %s", err.c_str()); - +try { shutdown = false; max_writeahead = safe_writeahead; @@ -198,6 +198,11 @@ RageSound_ALSA9_Software::RageSound_ALSA9_Software() MixingThread.SetName( "RageSound_ALSA9_Software" ); MixingThread.Create( MixerThread_start, this ); +} catch(...) { + UnloadALSA(); + throw; +} + } RageSound_ALSA9_Software::~RageSound_ALSA9_Software()