diff --git a/Dependencies/Unreal b/Dependencies/Unreal index 20e8e6581..3d1e7fcef 160000 --- a/Dependencies/Unreal +++ b/Dependencies/Unreal @@ -1 +1 @@ -Subproject commit 20e8e65814f8879c709842f14b5ecaea9acc02b2 +Subproject commit 3d1e7fcef313ad6a551c015ed874a325fdd32164 diff --git a/include/Mod.hpp b/include/Mod.hpp index 584bcc516..963376e2d 100644 --- a/include/Mod.hpp +++ b/include/Mod.hpp @@ -101,7 +101,7 @@ namespace RC auto prepare_mod(const LuaMadeSimple::Lua& lua) -> void; auto start_mod() -> void; auto is_started() const -> bool; - auto uninstall() const -> void; + auto uninstall() -> void; auto lua() const -> const LuaMadeSimple::Lua&; auto main_lua() const -> const LuaMadeSimple::Lua*; diff --git a/src/Mod.cpp b/src/Mod.cpp index 3757a280e..419f09799 100644 --- a/src/Mod.cpp +++ b/src/Mod.cpp @@ -2165,9 +2165,16 @@ No overload found for function 'FPackageName:IsValidLongPackageName'. return m_is_started; } - auto Mod::uninstall() const -> void + auto Mod::uninstall() -> void { Output::send(STR("Stopping mod '{}' for uninstall\n"), m_mod_name); + + if (m_async_thread.joinable()) + { + m_async_thread.request_stop(); + m_async_thread.join(); + } + if (m_hook_lua.size() > 0) { for (auto lua : m_hook_lua) @@ -2479,7 +2486,7 @@ No overload found for function 'FPackageName:IsValidLongPackageName'. auto Mod::update_async() -> void { - for (m_processing_events = true; m_processing_events;) + for (m_processing_events = true; m_processing_events && !m_async_thread.get_stop_token().stop_requested();) { if (m_pause_events_processing) { continue; } diff --git a/src/UE4SSProgram.cpp b/src/UE4SSProgram.cpp index 370c733c7..85a8c8781 100644 --- a/src/UE4SSProgram.cpp +++ b/src/UE4SSProgram.cpp @@ -1104,7 +1104,7 @@ namespace RC auto UE4SSProgram::uninstall_mods() -> void { - for (const auto& mod : m_mods) + for (auto& mod : m_mods) { // Remove any actions, or we'll get an internal error as the lua ref won't be valid mod->clear_delayed_actions();