From be7810c5a877898d792cc7d4406dc05c3280b38f Mon Sep 17 00:00:00 2001 From: xiphon Date: Thu, 20 Jun 2019 20:28:59 +0000 Subject: qt: implement FutureScheduler, always await async code to complete --- src/daemon/DaemonManager.cpp | 28 +++++++++++----------------- src/daemon/DaemonManager.h | 4 ++++ 2 files changed, 15 insertions(+), 17 deletions(-) (limited to 'src/daemon') diff --git a/src/daemon/DaemonManager.cpp b/src/daemon/DaemonManager.cpp index 136e72bd..ecbe1784 100644 --- a/src/daemon/DaemonManager.cpp +++ b/src/daemon/DaemonManager.cpp @@ -131,19 +131,12 @@ bool DaemonManager::start(const QString &flags, NetworkType::Type nettype, const } // Start start watcher - QFuture future = QtConcurrent::run(this, &DaemonManager::startWatcher, nettype); - QFutureWatcher * watcher = new QFutureWatcher(); - connect(watcher, &QFutureWatcher::finished, - this, [this, watcher]() { - QFuture future = watcher->future(); - watcher->deleteLater(); - if(future.result()) + m_scheduler.run([this, nettype] { + if (startWatcher(nettype)) emit daemonStarted(); else emit daemonStartFailure(); }); - watcher->setFuture(future); - return true; } @@ -155,17 +148,12 @@ bool DaemonManager::stop(NetworkType::Type nettype) qDebug() << message; // Start stop watcher - Will kill if not shutting down - QFuture future = QtConcurrent::run(this, &DaemonManager::stopWatcher, nettype); - QFutureWatcher * watcher = new QFutureWatcher(); - connect(watcher, &QFutureWatcher::finished, - this, [this, watcher]() { - QFuture future = watcher->future(); - watcher->deleteLater(); - if(future.result()) { + m_scheduler.run([this, nettype] { + if (stopWatcher(nettype)) + { emit daemonStopped(); } }); - watcher->setFuture(future); return true; } @@ -330,6 +318,7 @@ QVariantMap DaemonManager::validateDataDir(const QString &dataDir) const DaemonManager::DaemonManager(QObject *parent) : QObject(parent) + , m_scheduler(this) { // Platform depetent path to monerod @@ -344,3 +333,8 @@ DaemonManager::DaemonManager(QObject *parent) m_has_daemon = false; } } + +DaemonManager::~DaemonManager() +{ + m_scheduler.shutdownWaitForFinished(); +} diff --git a/src/daemon/DaemonManager.h b/src/daemon/DaemonManager.h index e85152ba..6063c8cb 100644 --- a/src/daemon/DaemonManager.h +++ b/src/daemon/DaemonManager.h @@ -33,6 +33,7 @@ #include #include #include +#include "qt/FutureScheduler.h" #include "NetworkType.h" class DaemonManager : public QObject @@ -71,6 +72,8 @@ public slots: private: explicit DaemonManager(QObject *parent = 0); + ~DaemonManager(); + static DaemonManager * m_instance; static QStringList m_clArgs; QProcess *m_daemon; @@ -79,6 +82,7 @@ private: bool m_has_daemon = true; bool m_app_exit = false; + FutureScheduler m_scheduler; }; #endif // DAEMONMANAGER_H -- cgit v1.2.3