diff --git a/src/audio/coreaudio/SDL_coreaudio.m b/src/audio/coreaudio/SDL_coreaudio.m index feca5b5aa..43066f3ec 100644 --- a/src/audio/coreaudio/SDL_coreaudio.m +++ b/src/audio/coreaudio/SDL_coreaudio.m @@ -704,6 +704,11 @@ COREAUDIO_CloseDevice(_THIS) /* if callback fires again, feed silence; don't call into the app. */ SDL_AtomicSet(&this->paused, 1); + /* dispose of the audio queue before waiting on the thread, or it might stall for a long time! */ + if (this->hidden->audioQueue) { + AudioQueueDispose(this->hidden->audioQueue, 0); + } + if (this->hidden->thread) { SDL_assert(SDL_AtomicGet(&this->shutdown) != 0); /* should have been set by SDL_audio.c */ SDL_WaitThread(this->hidden->thread, NULL); @@ -733,10 +738,6 @@ COREAUDIO_CloseDevice(_THIS) open_devices = NULL; } - if (this->hidden->audioQueue) { - AudioQueueDispose(this->hidden->audioQueue, 1); - } - if (this->hidden->ready_semaphore) { SDL_DestroySemaphore(this->hidden->ready_semaphore); }