From ca91ee9bd0aab2f742931c217a88b67be2fe3edf Mon Sep 17 00:00:00 2001 From: David Reid Date: Sun, 19 Jul 2026 09:11:08 +1000 Subject: [PATCH] Core Audio: Fix a deadlock when audio processing fails. Public issue https://github.com/mackron/miniaudio/issues/1136 --- miniaudio.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/miniaudio.h b/miniaudio.h index 1609e75d..319aefc4 100644 --- a/miniaudio.h +++ b/miniaudio.h @@ -39746,6 +39746,7 @@ static OSStatus ma_on_input__coreaudio(void* pUserData, AudioUnitRenderActionFla */ result = ma_device_realloc_AudioBufferList__coreaudio(pDevice, frameCount, pDevice->capture.internalFormat, pDevice->capture.internalChannels, layout); if (result != MA_SUCCESS) { + ma_device_state_async_release(&pDeviceStateCoreAudio->async); ma_log_postf(ma_device_get_log(pDevice), MA_LOG_LEVEL_DEBUG, "Failed to allocate AudioBufferList for capture."); return noErr; } @@ -39768,6 +39769,7 @@ static OSStatus ma_on_input__coreaudio(void* pUserData, AudioUnitRenderActionFla status = pContextStateCoreAudio->AudioUnitRender(pDeviceStateCoreAudio->audioUnitCapture, pActionFlags, pTimeStamp, busNumber, frameCount, pRenderedBufferList); if (status != noErr) { + ma_device_state_async_release(&pDeviceStateCoreAudio->async); ma_log_postf(ma_device_get_log(pDevice), MA_LOG_LEVEL_DEBUG, "ERROR: AudioUnitRender() failed with %d.", (int)status); return status; } @@ -52677,7 +52679,7 @@ MA_API void ma_device_state_async_process(ma_device_state_async* pAsyncDeviceSta } } - ma_semaphore_release(&pAsyncDeviceState->semaphore); + ma_device_state_async_release(pAsyncDeviceState); } /* END ma_device_state_async.c */