diff options
Diffstat (limited to 'src/input_common')
| -rw-r--r-- | src/input_common/sdl/sdl_impl.cpp | 28 | ||||
| -rw-r--r-- | src/input_common/settings.h | 2 |
2 files changed, 13 insertions, 17 deletions
diff --git a/src/input_common/sdl/sdl_impl.cpp b/src/input_common/sdl/sdl_impl.cpp index 8c2cef35d..9c3035920 100644 --- a/src/input_common/sdl/sdl_impl.cpp +++ b/src/input_common/sdl/sdl_impl.cpp | |||
| @@ -273,21 +273,19 @@ void SDLState::InitJoystick(int joystick_index) { | |||
| 273 | void SDLState::CloseJoystick(SDL_Joystick* sdl_joystick) { | 273 | void SDLState::CloseJoystick(SDL_Joystick* sdl_joystick) { |
| 274 | const std::string guid = GetGUID(sdl_joystick); | 274 | const std::string guid = GetGUID(sdl_joystick); |
| 275 | 275 | ||
| 276 | std::shared_ptr<SDLJoystick> found_joystick; | 276 | std::lock_guard lock{joystick_map_mutex}; |
| 277 | { | 277 | auto& joystick_guid_list = joystick_map[guid]; |
| 278 | std::lock_guard lock{joystick_map_mutex}; | 278 | auto joystick_it = std::find_if( |
| 279 | // This call to guid is safe since the joystick is guaranteed to be in the map | 279 | joystick_guid_list.begin(), joystick_guid_list.end(), |
| 280 | const auto& joystick_guid_list = joystick_map[guid]; | 280 | [&sdl_joystick](auto& joystick) { return joystick->GetSDLJoystick() == sdl_joystick; }); |
| 281 | const auto joystick_it = std::find_if(joystick_guid_list.begin(), joystick_guid_list.end(), | 281 | |
| 282 | [&sdl_joystick](const auto& joystick) { | 282 | if (joystick_it != joystick_guid_list.end()) { |
| 283 | return joystick->GetSDLJoystick() == sdl_joystick; | 283 | (*joystick_it)->SetSDLJoystick(nullptr, nullptr); |
| 284 | }); | 284 | joystick_guid_list.erase(joystick_it); |
| 285 | found_joystick = *joystick_it; | 285 | if (joystick_guid_list.empty()) { |
| 286 | } | 286 | joystick_map.erase(guid); |
| 287 | 287 | } | |
| 288 | // Destruct SDL_Joystick outside the lock guard because SDL can internally call the | 288 | } |
| 289 | // event callback which locks the mutex again. | ||
| 290 | found_joystick->SetSDLJoystick(nullptr, nullptr); | ||
| 291 | } | 289 | } |
| 292 | 290 | ||
| 293 | void SDLState::HandleGameControllerEvent(const SDL_Event& event) { | 291 | void SDLState::HandleGameControllerEvent(const SDL_Event& event) { |
diff --git a/src/input_common/settings.h b/src/input_common/settings.h index ab0b95cf1..f52d28540 100644 --- a/src/input_common/settings.h +++ b/src/input_common/settings.h | |||
| @@ -331,8 +331,6 @@ struct PlayerInput { | |||
| 331 | ButtonsRaw buttons; | 331 | ButtonsRaw buttons; |
| 332 | AnalogsRaw analogs; | 332 | AnalogsRaw analogs; |
| 333 | MotionRaw motions; | 333 | MotionRaw motions; |
| 334 | std::string lstick_mod; | ||
| 335 | std::string rstick_mod; | ||
| 336 | 334 | ||
| 337 | u32 body_color_left; | 335 | u32 body_color_left; |
| 338 | u32 body_color_right; | 336 | u32 body_color_right; |