From 820cffcdda438ff23372e79d04f8b5f7ec0e8b0b Mon Sep 17 00:00:00 2001 From: zhaoyingzhen Date: Tue, 8 Jul 2025 19:27:06 +0800 Subject: [PATCH] fix: avoid memory leak as title Log: as title Pms: BUG-318023 --- src/dde-session/main.cpp | 15 ++++++++------- src/utils/fifo.cpp | 5 +++-- src/utils/fifo.h | 5 +++-- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/dde-session/main.cpp b/src/dde-session/main.cpp index 4243d9c..25116aa 100644 --- a/src/dde-session/main.cpp +++ b/src/dde-session/main.cpp @@ -93,20 +93,20 @@ int main(int argc, char *argv[]) org::freedesktop::systemd1::Manager systemdDBus("org.freedesktop.systemd1", "/org/freedesktop/systemd1", QDBusConnection::sessionBus()); startSystemdUnit(systemdDBus, dmService, "replace"); - QDBusServiceWatcher *watcher = new QDBusServiceWatcher("org.deepin.dde.Session1", QDBusConnection::sessionBus(), QDBusServiceWatcher::WatchForUnregistration); + QDBusServiceWatcher *watcher = new QDBusServiceWatcher("org.deepin.dde.Session1", QDBusConnection::sessionBus(), QDBusServiceWatcher::WatchForUnregistration, &app); watcher->connect(watcher, &QDBusServiceWatcher::serviceUnregistered, [&] { qInfo() << "dde session exit"; startSystemdUnit(systemdDBus, "dde-session-exit-task.service", "replace"); qApp->quit(); }); + pid_t curPid = getpid(); - QThreadPool::globalInstance()->start([curPid]() { + Fifo *fifo = new Fifo(&app); + QThreadPool::globalInstance()->start([curPid, fifo]() { qInfo()<<"leader pipe thread id: " << QThread::currentThreadId() << ", pid: " << curPid; - Fifo *fifo = new Fifo; fifo->OpenWrite(); fifo->Write(QString::number(curPid)); }); - // We started the unit, open and sleep forever. return app.exec(); } @@ -116,7 +116,7 @@ int main(int argc, char *argv[]) // QProcess no block "/usr/bin/deepin-keyring-whitebox", "--opt-client=waitfifonotify"),BUG-255907 QProcess::startDetached("/usr/bin/deepin-keyring-whitebox", QStringList() << "--opt-client=waitfifonotify"); - auto* session = new Session; + auto* session = new Session(&app); new Session1Adaptor(session); QDBusConnection::sessionBus().registerService("org.deepin.dde.Session1"); QDBusConnection::sessionBus().registerObject("/org/deepin/dde/Session1", "org.deepin.dde.Session1", session); @@ -126,7 +126,7 @@ int main(int argc, char *argv[]) QDBusConnection::sessionBus().registerService("org.deepin.dde.SessionManager1"); QDBusConnection::sessionBus().registerObject("/org/deepin/dde/SessionManager1", "org.deepin.dde.SessionManager1", SessionManager::instance()); - auto *wmSwitcher = new WMSwitcher(); + auto *wmSwitcher = new WMSwitcher(&app); new WMSwitcher1Adaptor(wmSwitcher); QDBusConnection::sessionBus().registerService("org.deepin.dde.WMSwitcher1"); QDBusConnection::sessionBus().registerObject("/org/deepin/dde/WMSwitcher1", wmSwitcher); @@ -151,7 +151,7 @@ int main(int argc, char *argv[]) QThreadPool::globalInstance()->start([&session]() { qInfo()<< "systemd service pipe thread id: " << QThread::currentThreadId(); - Fifo *fifo = new Fifo; + Fifo *fifo = new Fifo(); fifo->OpenRead(); qInfo() << "pipe open read finish"; QString CurSessionPid; @@ -166,6 +166,7 @@ int main(int argc, char *argv[]) session->setSessionPath(); } } + fifo->deleteLater(); qInfo() << "pipe read finish, app exit."; qApp->quit(); }); diff --git a/src/utils/fifo.cpp b/src/utils/fifo.cpp index c74f78c..80aeec4 100644 --- a/src/utils/fifo.cpp +++ b/src/utils/fifo.cpp @@ -13,8 +13,9 @@ #include #include -Fifo::Fifo() - : m_fd(-1) +Fifo::Fifo(QObject *parent) + : QObject(parent) + , m_fd(-1) { m_fifoPath = QString(getenv("HOME")) + "/.cache/dde-session-fifo"; } diff --git a/src/utils/fifo.h b/src/utils/fifo.h index c695355..743bdb3 100644 --- a/src/utils/fifo.h +++ b/src/utils/fifo.h @@ -10,9 +10,10 @@ class Fifo : public QObject { + Q_OBJECT public: - Fifo(); - ~Fifo(); + Fifo(QObject *parent = nullptr); + virtual ~Fifo(); int Read(QString &data); int Write(QString data);