Skip to content

Commit

Permalink
Merge bitcoin#15280: gui: Fix shutdown order
Browse files Browse the repository at this point in the history
0dd6a8c Check m_internals in UnregisterValidationInterface (João Barbosa)
fd6d499 gui: Fix m_node.startShutdown() order (João Barbosa)
07b9aad gui: Expose BitcoinGUI::unsubscribeFromCoreSignals (João Barbosa)
60e190c gui: Fix WalletController deletion (João Barbosa)

Pull request description:

  This PR consists in small fixes in order to have a clean shutdown from the GUI.

Tree-SHA512: a9c641f202bc810698c4a39d5c5a1f54e54bdab098c412d65418879e00764a9db9f38383813914d591e24e097e49f177942b2ae6c57bba05dcc095e8a1d0b8f4
  • Loading branch information
laanwj committed Feb 4, 2019
2 parents 2fbf6a5 + 0dd6a8c commit 64127b3
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 9 deletions.
16 changes: 10 additions & 6 deletions src/qt/bitcoin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,8 @@ BitcoinApplication::~BitcoinApplication()
#ifdef ENABLE_WALLET
delete paymentServer;
paymentServer = nullptr;
delete m_wallet_controller;
m_wallet_controller = nullptr;
#endif
delete optionsModel;
optionsModel = nullptr;
Expand Down Expand Up @@ -307,18 +309,20 @@ void BitcoinApplication::requestShutdown()
qDebug() << __func__ << ": Requesting shutdown";
startThread();
window->hide();
// Must disconnect node signals otherwise current thread can deadlock since
// no event loop is running.
window->unsubscribeFromCoreSignals();
// Request node shutdown, which can interrupt long operations, like
// rescanning a wallet.
m_node.startShutdown();
// Unsetting the client model can cause the current thread to wait for node
// to complete an operation, like wait for a RPC execution to complate.
window->setClientModel(nullptr);
pollShutdownTimer->stop();

#ifdef ENABLE_WALLET
delete m_wallet_controller;
m_wallet_controller = nullptr;
#endif
delete clientModel;
clientModel = nullptr;

m_node.startShutdown();

// Request shutdown from core thread
Q_EMIT requestedShutdown();
}
Expand Down
5 changes: 3 additions & 2 deletions src/qt/bitcoingui.h
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,9 @@ class BitcoinGUI : public QMainWindow
*/
bool hasTrayIcon() const { return trayIcon; }

/** Disconnect core signals from GUI client */
void unsubscribeFromCoreSignals();

protected:
void changeEvent(QEvent *e);
void closeEvent(QCloseEvent *event);
Expand Down Expand Up @@ -184,8 +187,6 @@ class BitcoinGUI : public QMainWindow

/** Connect core signals to GUI client */
void subscribeToCoreSignals();
/** Disconnect core signals from GUI client */
void unsubscribeFromCoreSignals();

/** Update UI with latest network info from model. */
void updateNetworkState();
Expand Down
4 changes: 3 additions & 1 deletion src/validationinterface.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,9 @@ void RegisterValidationInterface(CValidationInterface* pwalletIn) {
}

void UnregisterValidationInterface(CValidationInterface* pwalletIn) {
g_signals.m_internals->m_connMainSignals.erase(pwalletIn);
if (g_signals.m_internals) {
g_signals.m_internals->m_connMainSignals.erase(pwalletIn);
}
}

void UnregisterAllValidationInterfaces() {
Expand Down

0 comments on commit 64127b3

Please sign in to comment.