From 07e56c70cf6ead2dda6ff263470a8db5a1caca44 Mon Sep 17 00:00:00 2001 From: David Reid Date: Sat, 17 Jul 2021 11:23:01 +1000 Subject: [PATCH] Core Audio: Try fixing a deadlock when switching devices. Public issue https://github.com/mackron/miniaudio/issues/344 --- miniaudio.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/miniaudio.h b/miniaudio.h index 1baabc43..d9038e1f 100644 --- a/miniaudio.h +++ b/miniaudio.h @@ -26347,6 +26347,12 @@ static void on_start_stop__coreaudio(void* pUserData, AudioUnit audioUnit, Audio ma_device* pDevice = (ma_device*)pUserData; MA_ASSERT(pDevice != NULL); + /* Don't do anything if it looks like we're just reinitializing due to a device switch. */ + if (((audioUnit == pDevice->coreaudio.audioUnitPlayback) && pDevice->coreaudio.isSwitchingPlaybackDevice) || + ((audioUnit == pDevice->coreaudio.audioUnitCapture) && pDevice->coreaudio.isSwitchingCaptureDevice)) { + return; + } + /* There's been a report of a deadlock here when triggered by ma_device_uninit(). It looks like AudioUnitGetProprty (called below) and AudioComponentInstanceDispose (called in ma_device_uninit)