From d2f77f63dc1199280c3a4ae1dff853eff7a40f62 Mon Sep 17 00:00:00 2001 From: Jean Pierre Cimalando Date: Sat, 22 Aug 2020 01:11:17 +0200 Subject: [PATCH] Ensure to update all variables on early return --- src/sfizz/FlexEnvelope.cpp | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/src/sfizz/FlexEnvelope.cpp b/src/sfizz/FlexEnvelope.cpp index c3e09359..abc2b4a0 100644 --- a/src/sfizz/FlexEnvelope.cpp +++ b/src/sfizz/FlexEnvelope.cpp @@ -129,13 +129,12 @@ void FlexEnvelope::Impl::process(absl::Span out) } size_t frameIndex = 0; - absl::optional framesUntilRelease = currentFramesUntilRelease_; while (frameIndex < numFrames) { // Check for release - if (framesUntilRelease && *framesUntilRelease == 0) { + if (currentFramesUntilRelease_ && *currentFramesUntilRelease_ == 0) { isReleased_ = true; - framesUntilRelease = absl::nullopt; + currentFramesUntilRelease_ = absl::nullopt; } // Perform stage transitions @@ -150,8 +149,8 @@ void FlexEnvelope::Impl::process(absl::Span out) // Process without going past the release point, if there is one size_t maxFrameIndex = numFrames; - if (framesUntilRelease) - maxFrameIndex = std::min(maxFrameIndex, frameIndex + *framesUntilRelease); + if (currentFramesUntilRelease_) + maxFrameIndex = std::min(maxFrameIndex, frameIndex + *currentFramesUntilRelease_); // Process the current stage float time = currentTime_; @@ -173,13 +172,11 @@ void FlexEnvelope::Impl::process(absl::Span out) currentLevel_ = level; // Update the counter to release - if (framesUntilRelease) - *framesUntilRelease -= framesDone; + if (currentFramesUntilRelease_) + *currentFramesUntilRelease_ -= framesDone; currentTime_ = time; } - - currentFramesUntilRelease_ = framesUntilRelease; } bool FlexEnvelope::Impl::advanceToNextStage()