From e2ba40a4912ab60677e00b0ea7d3749b7965f798 Mon Sep 17 00:00:00 2001 From: Kevin Funk Date: Mon, 19 Nov 2018 23:00:58 +0100 Subject: [PATCH] Fix a few memory leaks ASAN: Fix leak in XWindowTasksModel Summary: Trace: Direct leak of 24 byte(s) in 3 object(s) allocated from: #0 0x544cc0 in operator new(unsigned long) (/home/kfunk/devel/install/kf5/bin/plasmashell+0x544cc0) #1 0x7fe4f0e82df9 in TaskManager::XWindowTasksModel::Private::windowInfo(unsigned long long) /home/kfunk/devel/src/kf5/plasma-workspace/libtaskmanager/xwindowtasksmodel.cpp:419:25 #2 0x7fe4f0e87e69 in TaskManager::XWindowTasksModel::data(QModelIndex const&, int) const /home/kfunk/devel/src/kf5/plasma-workspace/libtaskmanager/xwindowtasksmodel.cpp:646:38 ... ASAN: Fix leak in ShellCorona Trace: Indirect leak of 48 byte(s) in 1 object(s) allocated from: #0 0x544cc0 in operator new(unsigned long) (/home/kfunk/devel/install/kf5/bin/plasmashell+0x544cc0) #1 0x5e1a95 in ShellCorona::checkAddPanelAction(QStringList const&) /home/kfunk/devel/src/kf5/plasma-workspace/shell/shellcorona.cpp:1728:27 #2 0x5dac7e in ShellCorona::ShellCorona(QObject*) /home/kfunk/devel/src/kf5/plasma-workspace/shell/shellcorona.cpp:180:5 #3 0x65c31d in ShellManager::loadHandlers() /home/kfunk/devel/src/kf5/plasma-workspace/shell/shellmanager.cpp:93:21 ... Reviewers: davidedmundson Reviewed By: davidedmundson Subscribers: davidedmundson, plasma-devel Tags: #plasma Differential Revision: https://phabricator.kde.org/D17032 --- shell/shellcorona.cpp | 9 ++++----- shell/shellcorona.h | 3 ++- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/shell/shellcorona.cpp b/shell/shellcorona.cpp index 7ae2814b9..78fb8c8ae 100644 --- a/shell/shellcorona.cpp +++ b/shell/shellcorona.cpp @@ -1709,8 +1709,7 @@ void ShellCorona::checkAddPanelAction(const QStringList &sycocaChanges) delete m_addPanelAction; m_addPanelAction = nullptr; - delete m_addPanelsMenu; - m_addPanelsMenu = nullptr; + m_addPanelsMenu.reset(nullptr); KPluginInfo::List panelContainmentPlugins = Plasma::PluginLoader::listContainmentsOfType(QStringLiteral("Panel")); @@ -1725,12 +1724,12 @@ void ShellCorona::checkAddPanelAction(const QStringList &sycocaChanges) m_addPanelAction->setData(Plasma::Types::AddAction); connect(m_addPanelAction, SIGNAL(triggered(bool)), this, SLOT(addPanel())); } else if (!panelContainmentPlugins.isEmpty()) { - m_addPanelsMenu = new QMenu; + m_addPanelsMenu.reset(new QMenu); m_addPanelAction = m_addPanelsMenu->menuAction(); m_addPanelAction->setText(i18n("Add Panel")); m_addPanelAction->setData(Plasma::Types::AddAction); - connect(m_addPanelsMenu, &QMenu::aboutToShow, this, &ShellCorona::populateAddPanelsMenu); - connect(m_addPanelsMenu, SIGNAL(triggered(QAction*)), this, SLOT(addPanel(QAction*))); + connect(m_addPanelsMenu.data(), &QMenu::aboutToShow, this, &ShellCorona::populateAddPanelsMenu); + connect(m_addPanelsMenu.data(), SIGNAL(triggered(QAction*)), this, SLOT(addPanel(QAction*))); } if (m_addPanelAction) { diff --git a/shell/shellcorona.h b/shell/shellcorona.h index 03bf3e04f..46ba0da2e 100644 --- a/shell/shellcorona.h +++ b/shell/shellcorona.h @@ -25,6 +25,7 @@ #include "plasma/corona.h" +#include #include #include #include @@ -238,7 +239,7 @@ private: QList m_waitingPanels; QHash m_activityContainmentPlugins; QAction *m_addPanelAction; - QMenu *m_addPanelsMenu; + QScopedPointer m_addPanelsMenu; KPackage::Package m_lookAndFeelPackage; QSet m_redundantOutputs; KDeclarative::QmlObjectSharedEngine *m_interactiveConsole;