mirror of
https://github.com/cemu-project/Cemu.git
synced 2026-06-02 12:45:01 -06:00
Input: Fix race condition in button mapping access (#1900)
This commit is contained in:
parent
2fd322ecf7
commit
ad73c1e054
@ -696,7 +696,7 @@ std::shared_ptr<VPADController> InputManager::get_vpad_controller(size_t index)
|
||||
return {};
|
||||
|
||||
std::shared_lock lock(m_mutex);
|
||||
return std::static_pointer_cast<VPADController>(m_vpad[index]);
|
||||
return std::dynamic_pointer_cast<VPADController>(m_vpad[index]);
|
||||
}
|
||||
|
||||
std::shared_ptr<WPADController> InputManager::get_wpad_controller(size_t index) const
|
||||
@ -705,7 +705,7 @@ std::shared_ptr<WPADController> InputManager::get_wpad_controller(size_t index)
|
||||
return {};
|
||||
|
||||
std::shared_lock lock(m_mutex);
|
||||
return std::static_pointer_cast<WPADController>(m_wpad[index]);
|
||||
return std::dynamic_pointer_cast<WPADController>(m_wpad[index]);
|
||||
}
|
||||
|
||||
std::pair<size_t, size_t> InputManager::get_controller_count() const
|
||||
|
||||
@ -263,6 +263,7 @@ void EmulatedController::clear_controllers()
|
||||
|
||||
float EmulatedController::get_axis_value(uint64 mapping) const
|
||||
{
|
||||
std::shared_lock lock(m_mutex);
|
||||
const auto it = m_mappings.find(mapping);
|
||||
if (it != m_mappings.cend())
|
||||
{
|
||||
@ -276,6 +277,7 @@ float EmulatedController::get_axis_value(uint64 mapping) const
|
||||
|
||||
bool EmulatedController::is_mapping_down(uint64 mapping) const
|
||||
{
|
||||
std::shared_lock lock(m_mutex);
|
||||
const auto it = m_mappings.find(mapping);
|
||||
if (it != m_mappings.cend())
|
||||
{
|
||||
@ -288,6 +290,7 @@ bool EmulatedController::is_mapping_down(uint64 mapping) const
|
||||
|
||||
std::string EmulatedController::get_mapping_name(uint64 mapping) const
|
||||
{
|
||||
std::shared_lock lock(m_mutex);
|
||||
const auto it = m_mappings.find(mapping);
|
||||
if (it != m_mappings.cend())
|
||||
{
|
||||
@ -301,6 +304,7 @@ std::string EmulatedController::get_mapping_name(uint64 mapping) const
|
||||
|
||||
std::shared_ptr<ControllerBase> EmulatedController::get_mapping_controller(uint64 mapping) const
|
||||
{
|
||||
std::shared_lock lock(m_mutex);
|
||||
const auto it = m_mappings.find(mapping);
|
||||
if (it != m_mappings.cend())
|
||||
{
|
||||
@ -314,17 +318,20 @@ std::shared_ptr<ControllerBase> EmulatedController::get_mapping_controller(uint6
|
||||
|
||||
void EmulatedController::delete_mapping(uint64 mapping)
|
||||
{
|
||||
std::scoped_lock lock(m_mutex);
|
||||
m_mappings.erase(mapping);
|
||||
}
|
||||
|
||||
void EmulatedController::clear_mappings()
|
||||
{
|
||||
std::scoped_lock lock(m_mutex);
|
||||
m_mappings.clear();
|
||||
}
|
||||
|
||||
void EmulatedController::set_mapping(uint64 mapping, const std::shared_ptr<ControllerBase>& controller,
|
||||
uint64 button)
|
||||
{
|
||||
std::scoped_lock lock(m_mutex);
|
||||
m_mappings[mapping] = { controller, button };
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user