Skip to content

Commit

Permalink
fix audio deadlock
Browse files Browse the repository at this point in the history
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
  • Loading branch information
slouken committed Oct 4, 2016
1 parent 56c88c4 commit 2558c9c
Showing 1 changed file with 4 additions and 3 deletions.
7 changes: 4 additions & 3 deletions src/audio/SDL_audio.c
Expand Up @@ -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);
}
Expand All @@ -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);
Expand Down

0 comments on commit 2558c9c

Please sign in to comment.