From c93c1d1dc30884b2c13bffdbc701efb5401b58b7 Mon Sep 17 00:00:00 2001
From: Dyami Caliri <dyami@dragonframe.com>
Date: Tue, 22 Jul 2014 11:19:14 -0700
Subject: [PATCH] CoreAudioOutput use timeout when waiting for render thread

On Snow Leopard (at least), changing the default audio device while
audio is playing can cause CoreAudioOutput to freeze in
audioThreadStop(). It seems that the OS stops calling renderCallback
when the device changes, so audioThreadStop() waits forever.

Change-Id: If7244cc50f12295ff91a979ef50e3bee1273affd
Reviewed-by: Andy Nichols <andy.nichols@digia.com>
---
 src/plugins/coreaudio/coreaudiooutput.mm | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/plugins/coreaudio/coreaudiooutput.mm b/src/plugins/coreaudio/coreaudiooutput.mm
index e5e1c65e5..812d9dfe2 100644
--- a/src/plugins/coreaudio/coreaudiooutput.mm
+++ b/src/plugins/coreaudio/coreaudiooutput.mm
@@ -698,14 +698,14 @@ void CoreAudioOutput::audioThreadStop()
 {
     stopTimers();
     if (m_audioThreadState.testAndSetAcquire(Running, Stopped))
-        m_threadFinished.wait(&m_mutex);
+        m_threadFinished.wait(&m_mutex, 500);
 }
 
 void CoreAudioOutput::audioThreadDrain()
 {
     stopTimers();
     if (m_audioThreadState.testAndSetAcquire(Running, Draining))
-        m_threadFinished.wait(&m_mutex);
+        m_threadFinished.wait(&m_mutex, 500);
 }
 
 void CoreAudioOutput::audioDeviceStop()
-- 
GitLab