From 251c0ba96dadf8d28406095ec2189466b631f7f8 Mon Sep 17 00:00:00 2001 From: jacqueline Date: Thu, 4 Apr 2024 15:11:32 +1100 Subject: [PATCH] Fix null poiner dereference when turning off i2s output twice --- src/audio/i2s_audio_output.cpp | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/audio/i2s_audio_output.cpp b/src/audio/i2s_audio_output.cpp index 2a251685..bf1c3e5e 100644 --- a/src/audio/i2s_audio_output.cpp +++ b/src/audio/i2s_audio_output.cpp @@ -63,16 +63,21 @@ auto I2SAudioOutput::changeMode(Modes mode) -> void { return; } if (mode == Modes::kOff) { - dac_->Stop(); - dac_.reset(); + if (dac_) { + dac_->Stop(); + dac_.reset(); + } return; - } else if (current_mode_ == Modes::kOff) { - auto instance = drivers::I2SDac::create(expander_); - if (!instance) { - return; + } + if (current_mode_ == Modes::kOff) { + if (!dac_) { + auto instance = drivers::I2SDac::create(expander_); + if (!instance) { + return; + } + dac_.reset(*instance); } SetVolume(GetVolume()); - dac_.reset(*instance); dac_->SetSource(stream()); dac_->Start(); }