DolphinQt/InputCommon: Fix a few memory leaks.

This commit is contained in:
Jordan Woyak
2019-03-17 12:51:50 -05:00
parent 54e09886d8
commit 725d34b2f0
10 changed files with 31 additions and 12 deletions

View File

@ -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;