From 932bb968d7a6261a517bc10bc487d622c032b0ed Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Wed, 20 Nov 2024 16:07:43 -0800 Subject: [PATCH] Fixed infinite recursion when the microphone is unavailable --- src/audio/coreaudio/SDL_coreaudio.m | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/audio/coreaudio/SDL_coreaudio.m b/src/audio/coreaudio/SDL_coreaudio.m index 9b6b81984a..569499854b 100644 --- a/src/audio/coreaudio/SDL_coreaudio.m +++ b/src/audio/coreaudio/SDL_coreaudio.m @@ -436,7 +436,12 @@ static bool UpdateAudioSession(SDL_AudioDevice *device, bool open, bool allow_pl } } } else if (data.playback && data.recording) { - category = AVAudioSessionCategoryPlayAndRecord; + if (allow_playandrecord) { + category = AVAudioSessionCategoryPlayAndRecord; + } else { + // We already failed play and record with AVAudioSessionErrorCodeResourceNotAvailable + return false; + } } else if (data.recording) { category = AVAudioSessionCategoryRecord; } @@ -494,12 +499,15 @@ static bool UpdateAudioSession(SDL_AudioDevice *device, bool open, bool allow_pl if (![session setActive:YES error:&err]) { if ([err code] == AVAudioSessionErrorCodeResourceNotAvailable && category == AVAudioSessionCategoryPlayAndRecord) { - return UpdateAudioSession(device, open, false); + if (UpdateAudioSession(device, open, false)) { + return true; + } else { + return SDL_SetError("Could not activate Audio Session: Resource not available"); + } } NSString *desc = err.description; - SDL_SetError("Could not activate Audio Session: %s", desc.UTF8String); - return false; + return SDL_SetError("Could not activate Audio Session: %s", desc.UTF8String); } session_active = true; ResumeAudioDevices();