From 5e47bc6ae4d7cb65df5c200fce99602c7f732f55 Mon Sep 17 00:00:00 2001 From: pixl Date: Tue, 2 May 2023 18:08:49 -0400 Subject: [PATCH] Handle race condition in InputDevice Lock mutex when sending events and changing input device. --- src/logid/InputDevice.cpp | 3 +++ src/logid/InputDevice.h | 2 ++ 2 files changed, 5 insertions(+) diff --git a/src/logid/InputDevice.cpp b/src/logid/InputDevice.cpp index 19d4c8f..9d3169c 100644 --- a/src/logid/InputDevice.cpp +++ b/src/logid/InputDevice.cpp @@ -18,6 +18,7 @@ #include #include +#include extern "C" { @@ -159,6 +160,7 @@ uint InputDevice::_toEventCode(uint type, const std::string& name) { } void InputDevice::_enableEvent(const uint type, const uint code) { + std::unique_lock lock(_input_mutex); libevdev_uinput_destroy(ui_device); libevdev_enable_event_code(device, type, code, nullptr); @@ -175,6 +177,7 @@ void InputDevice::_enableEvent(const uint type, const uint code) { } void InputDevice::_sendEvent(uint type, uint code, int value) { + std::unique_lock lock(_input_mutex); libevdev_uinput_write_event(ui_device, type, code, value); libevdev_uinput_write_event(ui_device, EV_SYN, SYN_REPORT, 0); } diff --git a/src/logid/InputDevice.h b/src/logid/InputDevice.h index 37694fe..67b2e8c 100644 --- a/src/logid/InputDevice.h +++ b/src/logid/InputDevice.h @@ -80,6 +80,8 @@ namespace logid { bool registered_axis[REL_CNT]{}; libevdev* device; libevdev_uinput* ui_device{}; + + std::mutex _input_mutex; }; }