diff options
| author | luigi1111 <luigi1111w@gmail.com> | 2020-04-28 15:23:03 -0500 |
|---|---|---|
| committer | luigi1111 <luigi1111w@gmail.com> | 2020-04-28 15:23:03 -0500 |
| commit | 5f183da6e32cc8898edc3a1941c9cbc8b83ee634 (patch) | |
| tree | f5284debe5819c356f0eb621cf7cba05370676d7 /src/daemon/DaemonManager.cpp | |
| parent | 30c54b1c6e1485a384bbd936821403dfc3f24e6a (diff) | |
| parent | 9748974ce04207e6d80b2cff99980cd614608d86 (diff) | |
| download | monzero-gui-5f183da6e32cc8898edc3a1941c9cbc8b83ee634.tar.gz monzero-gui-5f183da6e32cc8898edc3a1941c9cbc8b83ee634.tar.xz monzero-gui-5f183da6e32cc8898edc3a1941c9cbc8b83ee634.zip | |
Merge pull request #2867
9748974 DaemonManager: fix memory leak (xiphon)
Diffstat (limited to 'src/daemon/DaemonManager.cpp')
| -rw-r--r-- | src/daemon/DaemonManager.cpp | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/src/daemon/DaemonManager.cpp b/src/daemon/DaemonManager.cpp index 4ea3da5f..ad43eb48 100644 --- a/src/daemon/DaemonManager.cpp +++ b/src/daemon/DaemonManager.cpp @@ -29,6 +29,7 @@ #include "DaemonManager.h" #include <QElapsedTimer> #include <QFile> +#include <QMutexLocker> #include <QThread> #include <QFileInfo> #include <QDir> @@ -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) { |
