diff --git a/src/modules/audio/openal/Audio.cpp b/src/modules/audio/openal/Audio.cpp index ad1ba3e1b..28233924a 100644 --- a/src/modules/audio/openal/Audio.cpp +++ b/src/modules/audio/openal/Audio.cpp @@ -27,6 +27,7 @@ namespace audio namespace openal { Audio::Audio() + : finish(false) { // Passing zero for default device. device = alcOpenDevice(0); @@ -52,7 +53,10 @@ namespace openal Audio::~Audio() { - SDL_KillThread(thread); + finish = true; + + int status; + SDL_WaitThread(thread, &status); pool->stop(); @@ -67,7 +71,7 @@ namespace openal { Audio * instance = (Audio*)d; - while(true) + while(!instance->finish) { instance->pool->update(); SDL_Delay(10); diff --git a/src/modules/audio/openal/Audio.h b/src/modules/audio/openal/Audio.h index b6d3a2e87..c10c32853 100644 --- a/src/modules/audio/openal/Audio.h +++ b/src/modules/audio/openal/Audio.h @@ -65,6 +65,11 @@ namespace openal // The Pool. Pool * pool; + // Set this to true when the thread should finish. + // Main thread will write to this value, and Audio::run + // will read from it. + bool finish; + static int run(void * unused); public: