diff options
| author | 2021-06-22 02:31:39 -0300 | |
|---|---|---|
| committer | 2021-06-22 02:31:39 -0300 | |
| commit | 0a39163a90de377843d4726154a0247caa928fa1 (patch) | |
| tree | 61f2d71b247c125f9b90fcbc96fd1e6ff00046f5 /src/input_common/mouse/mouse_input.cpp | |
| parent | Merge pull request #6499 from FernandoS27/we-were-on-a-break (diff) | |
| download | yuzu-0a39163a90de377843d4726154a0247caa928fa1.tar.gz yuzu-0a39163a90de377843d4726154a0247caa928fa1.tar.xz yuzu-0a39163a90de377843d4726154a0247caa928fa1.zip | |
input_common/mouse_input: Fix data race
Fix data race using std::jthread and std::stop_token.
Diffstat (limited to 'src/input_common/mouse/mouse_input.cpp')
| -rw-r--r-- | src/input_common/mouse/mouse_input.cpp | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/src/input_common/mouse/mouse_input.cpp b/src/input_common/mouse/mouse_input.cpp index a335e6da1..3b052ffb2 100644 --- a/src/input_common/mouse/mouse_input.cpp +++ b/src/input_common/mouse/mouse_input.cpp | |||
| @@ -2,25 +2,23 @@ | |||
| 2 | // Licensed under GPLv2+ | 2 | // Licensed under GPLv2+ |
| 3 | // Refer to the license.txt file included. | 3 | // Refer to the license.txt file included. |
| 4 | 4 | ||
| 5 | #include <stop_token> | ||
| 6 | #include <thread> | ||
| 7 | |||
| 5 | #include "common/settings.h" | 8 | #include "common/settings.h" |
| 6 | #include "input_common/mouse/mouse_input.h" | 9 | #include "input_common/mouse/mouse_input.h" |
| 7 | 10 | ||
| 8 | namespace MouseInput { | 11 | namespace MouseInput { |
| 9 | 12 | ||
| 10 | Mouse::Mouse() { | 13 | Mouse::Mouse() { |
| 11 | update_thread = std::thread(&Mouse::UpdateThread, this); | 14 | update_thread = std::jthread([this](std::stop_token stop_token) { UpdateThread(stop_token); }); |
| 12 | } | 15 | } |
| 13 | 16 | ||
| 14 | Mouse::~Mouse() { | 17 | Mouse::~Mouse() = default; |
| 15 | update_thread_running = false; | ||
| 16 | if (update_thread.joinable()) { | ||
| 17 | update_thread.join(); | ||
| 18 | } | ||
| 19 | } | ||
| 20 | 18 | ||
| 21 | void Mouse::UpdateThread() { | 19 | void Mouse::UpdateThread(std::stop_token stop_token) { |
| 22 | constexpr int update_time = 10; | 20 | constexpr int update_time = 10; |
| 23 | while (update_thread_running) { | 21 | while (!stop_token.stop_requested()) { |
| 24 | for (MouseInfo& info : mouse_info) { | 22 | for (MouseInfo& info : mouse_info) { |
| 25 | const Common::Vec3f angular_direction{ | 23 | const Common::Vec3f angular_direction{ |
| 26 | -info.tilt_direction.y, | 24 | -info.tilt_direction.y, |