From f2187f6767f2ee1a9db47ee298c4451742d52a93 Mon Sep 17 00:00:00 2001 From: Andrey Filipenkov Date: Wed, 20 Jul 2022 16:48:32 +0300 Subject: [PATCH] fix infinite recursion when using SDL_mixer v2.6 Mix_HaltChannel -> soundFinishedCallback -> Mix_FreeChunk -> soundFinishedCallback -> ... --- client/CMusicHandler.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/client/CMusicHandler.cpp b/client/CMusicHandler.cpp index a95e360a6..2f550780c 100644 --- a/client/CMusicHandler.cpp +++ b/client/CMusicHandler.cpp @@ -257,13 +257,14 @@ void CSoundHandler::soundFinishedCallback(int channel) { std::map >::iterator iter; iter = callbacks.find(channel); + if (iter == callbacks.end()) + return; - assert(iter != callbacks.end()); - - if (iter->second) - iter->second(); - + auto callback = std::move(iter->second); callbacks.erase(iter); + + if (callback) + callback(); } int CSoundHandler::ambientGetRange() const