summaryrefslogtreecommitdiff
path: root/Source/Core/InputCommon/ControllerInterface/evdev
diff options
context:
space:
mode:
authorJordan Woyak <jordan.woyak@gmail.com>2019-03-17 12:51:50 -0500
committerJordan Woyak <jordan.woyak@gmail.com>2019-03-17 18:31:41 -0500
commit725d34b2f03999abbfda59cfba37988258812e20 (patch)
treedc343403132fef60e1a92a23302a0c913180295d /Source/Core/InputCommon/ControllerInterface/evdev
parent54e09886d8fdaa1eefbb28e19165fdea4900b61a (diff)
DolphinQt/InputCommon: Fix a few memory leaks.
Diffstat (limited to 'Source/Core/InputCommon/ControllerInterface/evdev')
-rw-r--r--Source/Core/InputCommon/ControllerInterface/evdev/evdev.cpp13
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;