diff --git a/src/Components/Loader.cpp b/src/Components/Loader.cpp index cce1e935..8f9d9bf5 100644 --- a/src/Components/Loader.cpp +++ b/src/Components/Loader.cpp @@ -49,7 +49,6 @@ #include "Modules/ServerList.hpp" #include "Modules/Session.hpp" #include "Modules/SlowMotion.hpp" -#include "Modules/SoundMutexFix.hpp" #include "Modules/StartupMessages.hpp" #include "Modules/Stats.hpp" #include "Modules/StringTable.hpp" @@ -163,7 +162,6 @@ namespace Components Register(new ServerList()); Register(new Session()); Register(new SlowMotion()); - Register(new SoundMutexFix()); Register(new StartupMessages()); Register(new Stats()); Register(new StringTable()); diff --git a/src/Components/Modules/SoundMutexFix.cpp b/src/Components/Modules/SoundMutexFix.cpp deleted file mode 100644 index 5a3c66b9..00000000 --- a/src/Components/Modules/SoundMutexFix.cpp +++ /dev/null @@ -1,40 +0,0 @@ -#include -#include "SoundMutexFix.hpp" - -namespace Components -{ - // This component is a workaround for issue https://github.com/XLabsProject/iw4x-client/issues/80 - // In case the link goes down, this is a "game hangs randomly" issue: - // - // Investigations on the issue pointed out it comes from a situation on Intel processors where - // WaitForSingleObjectA is ignored by a thread, for some (?) reason. - // - // This locks up the game randomly, mostly at the end of rounds or when too many things happen at - // once, due to trying to stop sounds (AIL_Stop_sounds) and playing streams at the same time, - // rushing for the same resource via AIL_lock_mutex. - // - // This bug has been reproduced on mp_terminal, mp_overgrown, mp_rust, with and without bots, - // and so far this has been the only way to circumvent it afaik. This component wraps - // miles' mutex into another mutex, created below, and for some reason (?) that mutex is - // respected when miles' is not. - // - // As soon as a real fix is found, please discard this fix. In the meantime, it should not - // have side effects too bad - worst case it might cause a slight performance drop during - // team switch and intermission. - // - - std::mutex SoundMutexFix::CloseStreamMutex; - - void WINAPI SoundMutexFix::AIL_close_stream_Stub(int h_stream) - { - std::lock_guard lock(CloseStreamMutex); - - const auto ptr = *reinterpret_cast(0x6D7554); // AIL_close_stream - Utils::Hook::Call(ptr)(h_stream); - } - - SoundMutexFix::SoundMutexFix() - { - Utils::Hook(0x689EFE, &AIL_close_stream_Stub, HOOK_JUMP).install()->quick(); - } -} diff --git a/src/Components/Modules/SoundMutexFix.hpp b/src/Components/Modules/SoundMutexFix.hpp deleted file mode 100644 index 5c4d8988..00000000 --- a/src/Components/Modules/SoundMutexFix.hpp +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once -#include - -namespace Components -{ - class SoundMutexFix : public Component - { - public: - SoundMutexFix(); - - private: - static std::mutex CloseStreamMutex; - static void WINAPI AIL_close_stream_Stub(int h_stream); - }; -}