@@ -158,6 +158,16 @@ void DebugMessageHandler(QtMsgType type, const QMessageLogContext& context, cons
158
158
BitcoinCore::BitcoinCore (interfaces::Node& node) :
159
159
QObject(), m_node(node)
160
160
{
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" ;
161
171
}
162
172
163
173
void BitcoinCore::handleRunawayException (const std::exception *e)
@@ -202,7 +212,6 @@ static const char* qt_argv = "bitcoin-qt";
202
212
203
213
BitcoinApplication::BitcoinApplication ():
204
214
QApplication(qt_argc, const_cast <char **>(&qt_argv)),
205
- coreThread(nullptr ),
206
215
optionsModel(nullptr ),
207
216
clientModel(nullptr ),
208
217
window(nullptr ),
@@ -230,13 +239,7 @@ void BitcoinApplication::setupPlatformStyle()
230
239
231
240
BitcoinApplication::~BitcoinApplication ()
232
241
{
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 ();
240
243
241
244
delete window;
242
245
window = nullptr ;
@@ -291,22 +294,15 @@ bool BitcoinApplication::baseInitialize()
291
294
292
295
void BitcoinApplication::startThread ()
293
296
{
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 ());
299
299
300
300
/* 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);
310
306
}
311
307
312
308
void BitcoinApplication::parameterSetup ()
@@ -339,7 +335,6 @@ void BitcoinApplication::requestShutdown()
339
335
shutdownWindow.reset (ShutdownWindow::showShutdownWindow (window));
340
336
341
337
qDebug () << __func__ << " : Requesting shutdown" ;
342
- startThread ();
343
338
window->hide ();
344
339
// Must disconnect node signals otherwise current thread can deadlock since
345
340
// no event loop is running.
0 commit comments