qt: Keep InitExecutor in main gui thread

This commit is contained in:
João Barbosa
2021-09-26 15:11:46 +01:00
parent 09cb5ec6c8
commit 03a5fe06bd
3 changed files with 28 additions and 23 deletions

View File

@@ -5,6 +5,7 @@
#include <qt/initexecutor.h> #include <qt/initexecutor.h>
#include <interfaces/node.h> #include <interfaces/node.h>
#include <qt/guiutil.h>
#include <util/system.h> #include <util/system.h>
#include <util/threadnames.h> #include <util/threadnames.h>
@@ -18,7 +19,7 @@
InitExecutor::InitExecutor(interfaces::Node& node) InitExecutor::InitExecutor(interfaces::Node& node)
: QObject(), m_node(node) : QObject(), m_node(node)
{ {
this->moveToThread(&m_thread); m_context.moveToThread(&m_thread);
m_thread.start(); m_thread.start();
} }
@@ -38,29 +39,33 @@ void InitExecutor::handleRunawayException(const std::exception* e)
void InitExecutor::initialize() void InitExecutor::initialize()
{ {
try { GUIUtil::ObjectInvoke(&m_context, [this] {
util::ThreadRename("qt-init"); try {
qDebug() << __func__ << ": Running initialization in thread"; util::ThreadRename("qt-init");
interfaces::BlockAndHeaderTipInfo tip_info; qDebug() << "Running initialization in thread";
bool rv = m_node.appInitMain(&tip_info); interfaces::BlockAndHeaderTipInfo tip_info;
Q_EMIT initializeResult(rv, tip_info); bool rv = m_node.appInitMain(&tip_info);
} catch (const std::exception& e) { Q_EMIT initializeResult(rv, tip_info);
handleRunawayException(&e); } catch (const std::exception& e) {
} catch (...) { handleRunawayException(&e);
handleRunawayException(nullptr); } catch (...) {
} handleRunawayException(nullptr);
}
});
} }
void InitExecutor::shutdown() void InitExecutor::shutdown()
{ {
try { GUIUtil::ObjectInvoke(&m_context, [this] {
qDebug() << __func__ << ": Running Shutdown in thread"; try {
m_node.appShutdown(); qDebug() << "Running Shutdown in thread";
qDebug() << __func__ << ": Shutdown finished"; m_node.appShutdown();
Q_EMIT shutdownResult(); qDebug() << "Shutdown finished";
} catch (const std::exception& e) { Q_EMIT shutdownResult();
handleRunawayException(&e); } catch (const std::exception& e) {
} catch (...) { handleRunawayException(&e);
handleRunawayException(nullptr); } catch (...) {
} handleRunawayException(nullptr);
}
});
} }

View File

@@ -40,6 +40,7 @@ private:
void handleRunawayException(const std::exception* e); void handleRunawayException(const std::exception* e);
interfaces::Node& m_node; interfaces::Node& m_node;
QObject m_context;
QThread m_thread; QThread m_thread;
}; };

View File

@@ -9,7 +9,6 @@
#include <interfaces/init.h> #include <interfaces/init.h>
#include <interfaces/node.h> #include <interfaces/node.h>
#include <qt/bitcoin.h> #include <qt/bitcoin.h>
#include <qt/initexecutor.h>
#include <qt/test/apptests.h> #include <qt/test/apptests.h>
#include <qt/test/rpcnestedtests.h> #include <qt/test/rpcnestedtests.h>
#include <qt/test/uritests.h> #include <qt/test/uritests.h>