commit 8e982f462c4117f84794cbf6a13740992ff17d92 parent 405193687ea68bc76ab6d8d32aa93ec713dc6e75 Author: Matt Demanett <matt@demanett.net> Date: Mon, 10 Jan 2022 23:19:22 -0500 Blind fix for illegal instruction crash for at least one user at the lock line initializing skins. #195 Diffstat:
M | src/skins.cpp | | | 30 | ++++++++++++++++++++++-------- |
1 file changed, 22 insertions(+), 8 deletions(-)
diff --git a/src/skins.cpp b/src/skins.cpp @@ -5,15 +5,29 @@ #include <fstream> #include <cstdio> +Skins globalSkins; +std::mutex globalSkinsLock; + Skins& Skins::skins() { - static Skins instance; - std::lock_guard<std::mutex> lock(instance._instanceLock); - if (!instance._loaded) { - instance.loadSkins(); - instance.loadCssValues(); - instance._loaded = true; - } - return instance; + // Hacky/blind attempt to fix https://github.com/bogaudio/BogaudioModules/issues/195. + // Replace this totally correct scoped static instance with a global, + // on the chance it will be handled more simply by the compiler. + // static Skins instance; + // std::lock_guard<std::mutex> lock(instance._instanceLock); + // if (!instance._loaded) { + // instance.loadSkins(); + // instance.loadCssValues(); + // instance._loaded = true; + // } + // return instance; + + std::lock_guard<std::mutex> lock(globalSkins._instanceLock); + if (!globalSkins._loaded) { + globalSkins.loadSkins(); + globalSkins.loadCssValues(); + globalSkins._loaded = true; + } + return globalSkins; } bool Skins::validKey(const std::string& key) const {