From 9e3498d43ed76bd12ecc72981d9a568c13c9a6d6 Mon Sep 17 00:00:00 2001 From: Jacob Sowder Date: Fri, 29 Nov 2024 19:40:15 -0500 Subject: [PATCH] Attempted fix for a runtime error caused by a double free. --- my-packages/my-games.scm | 6 ++- .../patches/barony-fix-double-free-bug.patch | 42 +++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 my-packages/patches/barony-fix-double-free-bug.patch diff --git a/my-packages/my-games.scm b/my-packages/my-games.scm index fc70311..86a9afe 100644 --- a/my-packages/my-games.scm +++ b/my-packages/my-games.scm @@ -211,7 +211,11 @@ strife, chex quest, and fan-created games like harmony, hacx and freedoom.") (patches (list (search-path (map (cut string-append <> "/my-packages/patches") %load-path) - "barony-fix-make-install-script.patch"))))) + "barony-fix-make-install-script.patch") + (search-path + (map (cut string-append <> "/my-packages/patches") + %load-path) + "barony-fix-double-free-bug.patch"))))) (build-system cmake-build-system) (arguments '(#:configure-flags diff --git a/my-packages/patches/barony-fix-double-free-bug.patch b/my-packages/patches/barony-fix-double-free-bug.patch new file mode 100644 index 0000000..96b11f1 --- /dev/null +++ b/my-packages/patches/barony-fix-double-free-bug.patch @@ -0,0 +1,42 @@ +diff --git a/src/engine/audio/sound.cpp b/src/engine/audio/sound.cpp +index 08940669..828e075b 100644 +--- a/src/engine/audio/sound.cpp ++++ b/src/engine/audio/sound.cpp +@@ -1839,23 +1839,23 @@ void physfsReloadMusic(bool &introMusicChanged, bool reloadAll) //TODO: This sho + OPENAL_Sound_Release(music[c]); + #endif + } +- if ( musicPreload ) +- { +- //fmod_result = fmod_system->createSound(musicDir.c_str(), FMOD_2D, nullptr, &music[c]); ++ else if ( musicPreload ) ++ { ++ //fmod_result = fmod_system->createSound(musicDir.c_str(), FMOD_2D, nullptr, &music[c]); + physfsReloadMusic_helper_reloadMusicArray(NUMINTROMUSIC, "music/intro%02d.ogg", music, reloadAll); +- } +- else +- { +- //fmod_result = fmod_system->createStream(musicDir.c_str(), FMOD_2D, nullptr, &music[c]); ++ } ++ else ++ { ++ //fmod_result = fmod_system->createStream(musicDir.c_str(), FMOD_2D, nullptr, &music[c]); + physfsReloadMusic_helper_reloadMusicArray(NUMINTROMUSIC, "music/intro%02d.ogg", music, reloadAll); +- } +- introChanged = true; ++ } ++ introChanged = true; + #ifdef USE_FMOD +- if (fmod_result != FMOD_OK) +- { +- printlog("[PhysFS]: ERROR: Failed reloading music file \"%s\"."); +- break; //TODO: Handle the error? +- } ++ if (fmod_result != FMOD_OK) ++ { ++ printlog("[PhysFS]: ERROR: Failed reloading music file \"%s\"."); ++ break; //TODO: Handle the error? ++ } + #endif + } + }