diff --git a/source/globals.cpp b/source/globals.cpp index 7ab020d..01f6771 100644 --- a/source/globals.cpp +++ b/source/globals.cpp @@ -17,7 +17,7 @@ std::vector gLoadedPlugins; std::set, PluginDataSharedPtrComparator> gLoadedData; std::vector gLoadOnNextLaunch; -std::mutex gLoadedDataMutex; +std::recursive_mutex gLoadedDataMutex; std::map gUsedRPLs; std::vector gAllocatedAddresses; diff --git a/source/globals.h b/source/globals.h index 64575cb..2814869 100644 --- a/source/globals.h +++ b/source/globals.h @@ -10,6 +10,7 @@ #include #include +#include #include #include @@ -28,7 +29,7 @@ extern std::vector gLoadedPlugins; extern std::set, PluginDataSharedPtrComparator> gLoadedData; extern std::vector gLoadOnNextLaunch; -extern std::mutex gLoadedDataMutex; +extern std::recursive_mutex gLoadedDataMutex; extern std::map gUsedRPLs; extern std::vector gAllocatedAddresses; diff --git a/source/utils/buttoncombo/ButtonComboUtils.cpp b/source/utils/buttoncombo/ButtonComboUtils.cpp index 07ed098..e606870 100644 --- a/source/utils/buttoncombo/ButtonComboUtils.cpp +++ b/source/utils/buttoncombo/ButtonComboUtils.cpp @@ -10,7 +10,7 @@ namespace ButtonComboUtils::API { static std::forward_list sButtonComboManager; - static std::mutex sButtonComboMutex; + static std::recursive_mutex sButtonComboMutex; namespace Internal { uint32_t CreateButtonComboData() { diff --git a/source/utils/storage/StorageUtils.cpp b/source/utils/storage/StorageUtils.cpp index 980e782..ba84abb 100644 --- a/source/utils/storage/StorageUtils.cpp +++ b/source/utils/storage/StorageUtils.cpp @@ -15,7 +15,7 @@ namespace StorageUtils { std::forward_list gStorage; - std::mutex gStorageMutex; + std::recursive_mutex gStorageMutex; namespace Helper { static WUPSStorageError ConvertToWUPSError(const StorageSubItem::StorageSubItemError &error) { diff --git a/source/utils/utils.h b/source/utils/utils.h index d801977..b08348f 100644 --- a/source/utils/utils.h +++ b/source/utils/utils.h @@ -111,14 +111,14 @@ remove_first_if(Container &container, Predicate pred) { } template -bool remove_locked_first_if(std::mutex &mutex, Container &container, Predicate pred) { - std::lock_guard lock(mutex); +bool remove_locked_first_if(std::recursive_mutex &mutex, Container &container, Predicate pred) { + std::lock_guard lock(mutex); return remove_first_if(container, pred); } template -T pop_locked_first_if(std::mutex &mutex, std::vector &container, Predicate pred) { - std::lock_guard lock(mutex); +T pop_locked_first_if(std::recursive_mutex &mutex, std::vector &container, Predicate pred) { + std::lock_guard lock(mutex); T result; auto it = container.begin(); while (it != container.end()) {