diff options
| author | luigi1111 <luigi1111w@gmail.com> | 2019-06-25 14:02:40 -0500 |
|---|---|---|
| committer | luigi1111 <luigi1111w@gmail.com> | 2019-06-25 14:02:40 -0500 |
| commit | 036b3b56c543ea603c168c2e17405f8ca290ea40 (patch) | |
| tree | 39c1456c1faec86e1d745e39c8d1883f3de281e0 /src/daemon | |
| parent | 3c3848633ee01c78a3dc7602912087cad25e49fc (diff) | |
| parent | be7810c5a877898d792cc7d4406dc05c3280b38f (diff) | |
| download | monzero-gui-036b3b56c543ea603c168c2e17405f8ca290ea40.tar.gz monzero-gui-036b3b56c543ea603c168c2e17405f8ca290ea40.tar.xz monzero-gui-036b3b56c543ea603c168c2e17405f8ca290ea40.zip | |
Merge pull request #2229
be7810c qt: implement FutureScheduler, always await async code to complete (xiphon)
Diffstat (limited to 'src/daemon')
| -rw-r--r-- | src/daemon/DaemonManager.cpp | 28 | ||||
| -rw-r--r-- | src/daemon/DaemonManager.h | 4 |
2 files changed, 15 insertions, 17 deletions
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<bool> future = QtConcurrent::run(this, &DaemonManager::startWatcher, nettype); - QFutureWatcher<bool> * watcher = new QFutureWatcher<bool>(); - connect(watcher, &QFutureWatcher<bool>::finished, - this, [this, watcher]() { - QFuture<bool> 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<bool> future = QtConcurrent::run(this, &DaemonManager::stopWatcher, nettype); - QFutureWatcher<bool> * watcher = new QFutureWatcher<bool>(); - connect(watcher, &QFutureWatcher<bool>::finished, - this, [this, watcher]() { - QFuture<bool> 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 <QUrl> #include <QProcess> #include <QVariantMap> +#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 |
