From 2558c9c836773f2d54958a286e1c42c125521592 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Tue, 4 Oct 2016 06:45:28 -0700 Subject: [PATCH] fix audio deadlock James Zipperer Close the audio device before waiting for the audio thread to complete, which fixes a situation where the audio thread never completes Add an additional check in the audio thread to see if the device is enabled and bail out if the device is no longer enabled --- src/audio/SDL_audio.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/audio/SDL_audio.c b/src/audio/SDL_audio.c index 632731b80..29b08e732 100644 --- a/src/audio/SDL_audio.c +++ b/src/audio/SDL_audio.c @@ -1051,6 +1051,10 @@ close_audio_device(SDL_AudioDevice * device) { SDL_AtomicSet(&device->shutdown, 1); SDL_AtomicSet(&device->enabled, 0); + + if (device->hidden != NULL) { + current_audio.impl.CloseDevice(device); + } if (device->thread != NULL) { SDL_WaitThread(device->thread, NULL); } @@ -1061,9 +1065,6 @@ close_audio_device(SDL_AudioDevice * device) if (device->convert.needed) { SDL_free(device->convert.buf); } - if (device->hidden != NULL) { - current_audio.impl.CloseDevice(device); - } free_audio_queue(device->buffer_queue_head); free_audio_queue(device->buffer_queue_pool);