npad: Fix data race when updating devices
Add a lock to avoid data races. This reduces the number of -fsanitize=thread errors significantly.
This commit is contained in:
		| @@ -314,6 +314,8 @@ void Controller_NPad::OnInit() { | ||||
|  | ||||
| void Controller_NPad::OnLoadInputDevices() { | ||||
|     const auto& players = Settings::values.players.GetValue(); | ||||
|  | ||||
|     std::lock_guard lock{mutex}; | ||||
|     for (std::size_t i = 0; i < players.size(); ++i) { | ||||
|         std::transform(players[i].buttons.begin() + Settings::NativeButton::BUTTON_HID_BEGIN, | ||||
|                        players[i].buttons.begin() + Settings::NativeButton::BUTTON_HID_END, | ||||
| @@ -348,6 +350,8 @@ void Controller_NPad::OnRelease() { | ||||
| } | ||||
|  | ||||
| void Controller_NPad::RequestPadStateUpdate(u32 npad_id) { | ||||
|     std::lock_guard lock{mutex}; | ||||
|  | ||||
|     const auto controller_idx = NPadIdToIndex(npad_id); | ||||
|     const auto controller_type = connected_controllers[controller_idx].type; | ||||
|     if (!connected_controllers[controller_idx].is_connected) { | ||||
|   | ||||
| @@ -6,6 +6,8 @@ | ||||
|  | ||||
| #include <array> | ||||
| #include <atomic> | ||||
| #include <mutex> | ||||
|  | ||||
| #include "common/bit_field.h" | ||||
| #include "common/common_types.h" | ||||
| #include "common/quaternion.h" | ||||
| @@ -563,6 +565,8 @@ private: | ||||
|     using MotionArray = std::array< | ||||
|         std::array<std::unique_ptr<Input::MotionDevice>, Settings::NativeMotion::NUM_MOTIONS_HID>, | ||||
|         10>; | ||||
|  | ||||
|     std::mutex mutex; | ||||
|     ButtonArray buttons; | ||||
|     StickArray sticks; | ||||
|     VibrationArray vibrations; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Rodrigo Locatti
					Rodrigo Locatti