ソースを参照

fix infinite recursion when using SDL_mixer v2.6

Mix_HaltChannel -> soundFinishedCallback -> Mix_FreeChunk -> soundFinishedCallback -> ...
Andrey Filipenkov 3 年 前
コミット
f2187f6767
1 ファイル変更6 行追加5 行削除
  1. 6 5
      client/CMusicHandler.cpp

+ 6 - 5
client/CMusicHandler.cpp

@@ -257,13 +257,14 @@ void CSoundHandler::soundFinishedCallback(int channel)
 {
 	std::map<int, std::function<void()> >::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