diff options
Diffstat (limited to 'Source/Core/InputCommon/ControllerInterface/evdev')
| -rw-r--r-- | Source/Core/InputCommon/ControllerInterface/evdev/evdev.cpp | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/Source/Core/InputCommon/ControllerInterface/evdev/evdev.cpp b/Source/Core/InputCommon/ControllerInterface/evdev/evdev.cpp index d1fa694fae..fe9e31dc21 100644 --- a/Source/Core/InputCommon/ControllerInterface/evdev/evdev.cpp +++ b/Source/Core/InputCommon/ControllerInterface/evdev/evdev.cpp @@ -16,6 +16,7 @@ #include "Common/Flag.h" #include "Common/Logging/Log.h" #include "Common/MathUtil.h" +#include "Common/ScopeGuard.h" #include "Common/StringUtil.h" #include "Common/Thread.h" #include "InputCommon/ControllerInterface/ControllerInterface.h" @@ -40,10 +41,14 @@ static void HotplugThreadFunc() NOTICE_LOG(SERIALINTERFACE, "evdev hotplug thread started"); udev* const udev = udev_new(); + Common::ScopeGuard udev_guard([udev] { udev_unref(udev); }); + ASSERT_MSG(PAD, udev != nullptr, "Couldn't initialize libudev."); // Set up monitoring udev_monitor* const monitor = udev_monitor_new_from_netlink(udev, "udev"); + Common::ScopeGuard monitor_guard([monitor] { udev_monitor_unref(monitor); }); + udev_monitor_filter_add_match_subsystem_devtype(monitor, "input", nullptr); udev_monitor_enable_receiving(monitor); const int monitor_fd = udev_monitor_get_fd(monitor); @@ -61,11 +66,11 @@ static void HotplugThreadFunc() if (ret < 1 || !FD_ISSET(monitor_fd, &fds)) continue; - std::unique_ptr<udev_device, decltype(&udev_device_unref)> dev{ - udev_monitor_receive_device(monitor), udev_device_unref}; + udev_device* const dev = udev_monitor_receive_device(monitor); + Common::ScopeGuard dev_guard([dev] { udev_device_unref(dev); }); - const char* const action = udev_device_get_action(dev.get()); - const char* const devnode = udev_device_get_devnode(dev.get()); + const char* const action = udev_device_get_action(dev); + const char* const devnode = udev_device_get_devnode(dev); if (!devnode) continue; |
