From 9748974ce04207e6d80b2cff99980cd614608d86 Mon Sep 17 00:00:00 2001 From: xiphon Date: Mon, 27 Apr 2020 12:39:41 +0000 Subject: DaemonManager: fix memory leak --- src/daemon/DaemonManager.cpp | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) (limited to 'src/daemon/DaemonManager.cpp') diff --git a/src/daemon/DaemonManager.cpp b/src/daemon/DaemonManager.cpp index 74f1077a..90d10adf 100644 --- a/src/daemon/DaemonManager.cpp +++ b/src/daemon/DaemonManager.cpp @@ -29,6 +29,7 @@ #include "DaemonManager.h" #include #include +#include #include #include #include @@ -123,18 +124,20 @@ bool DaemonManager::start(const QString &flags, NetworkType::Type nettype, const qDebug() << "starting monerod " + m_monerod; qDebug() << "With command line arguments " << arguments; - m_daemon = new QProcess(); + QMutexLocker locker(&m_daemonMutex); + + m_daemon.reset(new QProcess()); initialized = true; // Connect output slots - connect (m_daemon, SIGNAL(readyReadStandardOutput()), this, SLOT(printOutput())); - connect (m_daemon, SIGNAL(readyReadStandardError()), this, SLOT(printError())); + connect(m_daemon.get(), SIGNAL(readyReadStandardOutput()), this, SLOT(printOutput())); + connect(m_daemon.get(), SIGNAL(readyReadStandardError()), this, SLOT(printError())); // Start monerod bool started = m_daemon->startDetached(m_monerod, arguments); // add state changed listener - connect(m_daemon,SIGNAL(stateChanged(QProcess::ProcessState)),this,SLOT(stateChanged(QProcess::ProcessState))); + connect(m_daemon.get(), SIGNAL(stateChanged(QProcess::ProcessState)), this, SLOT(stateChanged(QProcess::ProcessState))); if (!started) { qDebug() << "Daemon start error: " + m_daemon->errorString(); @@ -223,7 +226,10 @@ void DaemonManager::stateChanged(QProcess::ProcessState state) void DaemonManager::printOutput() { - QByteArray byteArray = m_daemon->readAllStandardOutput(); + QByteArray byteArray = [this]() { + QMutexLocker locker(&m_daemonMutex); + return m_daemon->readAllStandardOutput(); + }(); QStringList strLines = QString(byteArray).split("\n"); foreach (QString line, strLines) { @@ -234,7 +240,10 @@ void DaemonManager::printOutput() void DaemonManager::printError() { - QByteArray byteArray = m_daemon->readAllStandardError(); + QByteArray byteArray = [this]() { + QMutexLocker locker(&m_daemonMutex); + return m_daemon->readAllStandardError(); + }(); QStringList strLines = QString(byteArray).split("\n"); foreach (QString line, strLines) { -- cgit v1.2.3