summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMorph <39850852+Morph1984@users.noreply.github.com>2021-01-31 16:06:06 +0100
committerGitHub <noreply@github.com>2021-01-31 16:06:06 +0100
commitf7dc77e03a65dd7a2e6cf90de3337902702866a4 (patch)
tree4c551ed67c677c894b3b78d9a144e0ab50d74186
parentMerge pull request #5857 from Morph1984/bsd-fix-eventfd-stub (diff)
parentanalog_from_button: Fix update_thread.join exception (diff)
downloadyuzu-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
-rwxr-xr-xsrc/input_common/analog_from_button.cpp14
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) {