Skip to content

Commit 19a1d00

Browse files
committed
qt: Add BitcoinCore::m_thread member
This change makes BitcoinCore self-contained to improve its re-usability. BitcoinApplication::coreThread member is now unused, and removed.
1 parent 531c2b7 commit 19a1d00

File tree

2 files changed

+26
-26
lines changed

2 files changed

+26
-26
lines changed

src/qt/bitcoin.cpp

Lines changed: 18 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,16 @@ void DebugMessageHandler(QtMsgType type, const QMessageLogContext& context, cons
158158
BitcoinCore::BitcoinCore(interfaces::Node& node) :
159159
QObject(), m_node(node)
160160
{
161+
this->moveToThread(&m_thread);
162+
m_thread.start();
163+
}
164+
165+
BitcoinCore::~BitcoinCore()
166+
{
167+
qDebug() << __func__ << ": Stopping thread";
168+
m_thread.quit();
169+
m_thread.wait();
170+
qDebug() << __func__ << ": Stopped thread";
161171
}
162172

163173
void BitcoinCore::handleRunawayException(const std::exception *e)
@@ -202,7 +212,6 @@ static const char* qt_argv = "bitcoin-qt";
202212

203213
BitcoinApplication::BitcoinApplication():
204214
QApplication(qt_argc, const_cast<char **>(&qt_argv)),
205-
coreThread(nullptr),
206215
optionsModel(nullptr),
207216
clientModel(nullptr),
208217
window(nullptr),
@@ -230,13 +239,7 @@ void BitcoinApplication::setupPlatformStyle()
230239

231240
BitcoinApplication::~BitcoinApplication()
232241
{
233-
if(coreThread)
234-
{
235-
qDebug() << __func__ << ": Stopping thread";
236-
coreThread->quit();
237-
coreThread->wait();
238-
qDebug() << __func__ << ": Stopped thread";
239-
}
242+
m_executor.reset();
240243

241244
delete window;
242245
window = nullptr;
@@ -291,22 +294,15 @@ bool BitcoinApplication::baseInitialize()
291294

292295
void BitcoinApplication::startThread()
293296
{
294-
if(coreThread)
295-
return;
296-
coreThread = new QThread(this);
297-
BitcoinCore *executor = new BitcoinCore(node());
298-
executor->moveToThread(coreThread);
297+
assert(!m_executor);
298+
m_executor.emplace(node());
299299

300300
/* communication to and from thread */
301-
connect(executor, &BitcoinCore::initializeResult, this, &BitcoinApplication::initializeResult);
302-
connect(executor, &BitcoinCore::shutdownResult, this, &BitcoinApplication::shutdownResult);
303-
connect(executor, &BitcoinCore::runawayException, this, &BitcoinApplication::handleRunawayException);
304-
connect(this, &BitcoinApplication::requestedInitialize, executor, &BitcoinCore::initialize);
305-
connect(this, &BitcoinApplication::requestedShutdown, executor, &BitcoinCore::shutdown);
306-
/* make sure executor object is deleted in its own thread */
307-
connect(coreThread, &QThread::finished, executor, &QObject::deleteLater);
308-
309-
coreThread->start();
301+
connect(&m_executor.value(), &BitcoinCore::initializeResult, this, &BitcoinApplication::initializeResult);
302+
connect(&m_executor.value(), &BitcoinCore::shutdownResult, this, &BitcoinApplication::shutdownResult);
303+
connect(&m_executor.value(), &BitcoinCore::runawayException, this, &BitcoinApplication::handleRunawayException);
304+
connect(this, &BitcoinApplication::requestedInitialize, &m_executor.value(), &BitcoinCore::initialize);
305+
connect(this, &BitcoinApplication::requestedShutdown, &m_executor.value(), &BitcoinCore::shutdown);
310306
}
311307

312308
void BitcoinApplication::parameterSetup()
@@ -339,7 +335,6 @@ void BitcoinApplication::requestShutdown()
339335
shutdownWindow.reset(ShutdownWindow::showShutdownWindow(window));
340336

341337
qDebug() << __func__ << ": Requesting shutdown";
342-
startThread();
343338
window->hide();
344339
// Must disconnect node signals otherwise current thread can deadlock since
345340
// no event loop is running.

src/qt/bitcoin.h

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,14 @@
99
#include <config/bitcoin-config.h>
1010
#endif
1111

12-
#include <QApplication>
12+
#include <interfaces/node.h>
13+
1314
#include <assert.h>
1415
#include <memory>
16+
#include <optional>
1517

16-
#include <interfaces/node.h>
18+
#include <QApplication>
19+
#include <QThread>
1720

1821
class BitcoinGUI;
1922
class ClientModel;
@@ -34,6 +37,7 @@ class BitcoinCore: public QObject
3437
Q_OBJECT
3538
public:
3639
explicit BitcoinCore(interfaces::Node& node);
40+
~BitcoinCore();
3741

3842
public Q_SLOTS:
3943
void initialize();
@@ -49,6 +53,7 @@ public Q_SLOTS:
4953
void handleRunawayException(const std::exception *e);
5054

5155
interfaces::Node& m_node;
56+
QThread m_thread;
5257
};
5358

5459
/** Main Bitcoin application object */
@@ -112,7 +117,7 @@ public Q_SLOTS:
112117
void windowShown(BitcoinGUI* window);
113118

114119
private:
115-
QThread *coreThread;
120+
std::optional<BitcoinCore> m_executor;
116121
OptionsModel *optionsModel;
117122
ClientModel *clientModel;
118123
BitcoinGUI *window;

0 commit comments

Comments
 (0)