diff options
author | Morph <39850852+Morph1984@users.noreply.github.com> | 2021-01-31 16:06:06 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-01-31 16:06:06 +0100 |
commit | f7dc77e03a65dd7a2e6cf90de3337902702866a4 (patch) | |
tree | 4c551ed67c677c894b3b78d9a144e0ab50d74186 /src | |
parent | Merge pull request #5857 from Morph1984/bsd-fix-eventfd-stub (diff) | |
parent | analog_from_button: Fix update_thread.join exception (diff) | |
download | yuzu-f7dc77e03a65dd7a2e6cf90de3337902702866a4.tar yuzu-f7dc77e03a65dd7a2e6cf90de3337902702866a4.tar.gz yuzu-f7dc77e03a65dd7a2e6cf90de3337902702866a4.tar.bz2 yuzu-f7dc77e03a65dd7a2e6cf90de3337902702866a4.tar.lz yuzu-f7dc77e03a65dd7a2e6cf90de3337902702866a4.tar.xz yuzu-f7dc77e03a65dd7a2e6cf90de3337902702866a4.tar.zst yuzu-f7dc77e03a65dd7a2e6cf90de3337902702866a4.zip |
Diffstat (limited to 'src')
-rwxr-xr-x | src/input_common/analog_from_button.cpp | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/input_common/analog_from_button.cpp b/src/input_common/analog_from_button.cpp index 40b516f85..07a0fa4a1 100755 --- a/src/input_common/analog_from_button.cpp +++ b/src/input_common/analog_from_button.cpp @@ -2,6 +2,7 @@ // Licensed under GPLv2 or any later version // Refer to the license.txt file included. +#include <atomic> #include <chrono> #include <cmath> #include <thread> @@ -20,13 +21,16 @@ public: : up(std::move(up_)), down(std::move(down_)), left(std::move(left_)), right(std::move(right_)), modifier(std::move(modifier_)), modifier_scale(modifier_scale_), modifier_angle(modifier_angle_) { + update_thread_running.store(true); update_thread = std::thread(&Analog::UpdateStatus, this); } ~Analog() override { - update_thread_running = false; - if (update_thread.joinable()) { - update_thread.join(); + if (update_thread_running.load()) { + update_thread_running.store(false); + if (update_thread.joinable()) { + update_thread.join(); + } } } @@ -58,7 +62,7 @@ public: } void UpdateStatus() { - while (update_thread_running) { + while (update_thread_running.load()) { const float coef = modifier->GetStatus() ? modifier_scale : 1.0f; bool r = right->GetStatus(); @@ -160,7 +164,7 @@ private: float angle{}; float amplitude{}; std::thread update_thread; - bool update_thread_running{true}; + std::atomic<bool> update_thread_running{}; }; std::unique_ptr<Input::AnalogDevice> AnalogFromButton::Create(const Common::ParamPackage& params) { |