From c036c8dc8453792df25f15689f0dba34548dde9c Mon Sep 17 00:00:00 2001 From: Aaron Culliney Date: Sat, 4 Jul 2015 18:13:01 -0700 Subject: [PATCH] Defensive coding around case where backend soundsystem is unavailable --- src/audio/soundcore.c | 37 ++++++++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/src/audio/soundcore.c b/src/audio/soundcore.c index d5151a34..44c04515 100644 --- a/src/audio/soundcore.c +++ b/src/audio/soundcore.c @@ -25,6 +25,11 @@ AudioBackend_s *audio_backend = NULL; //----------------------------------------------------------------------------- long audio_createSoundBuffer(INOUT AudioBuffer_s **audioBuffer, unsigned long numChannels) { + *audioBuffer = NULL; + + if (!audio_isAvailable) { + return -1; + } AudioSettings_s *settings = &audio_backend->systemSettings; @@ -59,18 +64,26 @@ bool audio_init(void) { return true; } - if (audioContext) { - audio_backend->shutdown(&audioContext); - } + do { + if (!audio_backend) { + LOG("No backend audio available, cannot initialize soundcore"); + break; + } + + if (audioContext) { + audio_backend->shutdown(&audioContext); + } + + long err = audio_backend->setup((AudioContext_s**)&audioContext); + if (err) { + LOG("Failed to create an audio context!"); + break; + } - long err = audio_backend->setup((AudioContext_s**)&audioContext); - if (err) { - LOG("Failed to create an audio context!"); - } else { audio_isAvailable = true; - } + } while (0); - return err; + return audio_isAvailable; } void audio_shutdown(void) { @@ -82,10 +95,16 @@ void audio_shutdown(void) { } void audio_pause(void) { + if (!audio_isAvailable) { + return; + } audio_backend->pause(); } void audio_resume(void) { + if (!audio_isAvailable) { + return; + } audio_backend->resume(); }