From 596f43e786e17ad0dcb3b846e2434852431f671b Mon Sep 17 00:00:00 2001 From: Hennadii Stepanov <32963518+hebasto@users.noreply.github.com> Date: Thu, 26 May 2022 12:21:48 +0200 Subject: [PATCH 1/4] Skip manual signal disconnection in `~WalletModel()` dtor A boost::signals2::scoped_connection automatically disconnects on its destruction. https://www.boost.org/doc/libs/1_64_0/doc/html/boost/signals2/scoped_connection.html --- src/qt/walletmodel.cpp | 17 ----------------- src/qt/walletmodel.h | 6 +++--- 2 files changed, 3 insertions(+), 20 deletions(-) diff --git a/src/qt/walletmodel.cpp b/src/qt/walletmodel.cpp index 1f6c90af4ad..1c0a96853c7 100644 --- a/src/qt/walletmodel.cpp +++ b/src/qt/walletmodel.cpp @@ -60,11 +60,6 @@ WalletModel::WalletModel(std::unique_ptr wallet, ClientModel subscribeToCoreSignals(); } -WalletModel::~WalletModel() -{ - unsubscribeFromCoreSignals(); -} - void WalletModel::startPollBalance() { // This timer will be fired repeatedly to update the balance @@ -420,18 +415,6 @@ void WalletModel::subscribeToCoreSignals() m_handler_can_get_addrs_changed = m_wallet->handleCanGetAddressesChanged(std::bind(NotifyCanGetAddressesChanged, this)); } -void WalletModel::unsubscribeFromCoreSignals() -{ - // Disconnect signals from wallet - m_handler_unload->disconnect(); - m_handler_status_changed->disconnect(); - m_handler_address_book_changed->disconnect(); - m_handler_transaction_changed->disconnect(); - m_handler_show_progress->disconnect(); - m_handler_watch_only_changed->disconnect(); - m_handler_can_get_addrs_changed->disconnect(); -} - // WalletModel::UnlockContext implementation WalletModel::UnlockContext WalletModel::requestUnlock() { diff --git a/src/qt/walletmodel.h b/src/qt/walletmodel.h index 540fdaafe3c..771d8b7e48b 100644 --- a/src/qt/walletmodel.h +++ b/src/qt/walletmodel.h @@ -14,9 +14,11 @@ #include +#include #include #include +#include #include #include @@ -55,7 +57,6 @@ class WalletModel : public QObject public: explicit WalletModel(std::unique_ptr wallet, ClientModel& client_model, const PlatformStyle *platformStyle, QObject *parent = nullptr); - ~WalletModel(); enum StatusCode // Returned by sendCoins { @@ -111,7 +112,7 @@ class WalletModel : public QObject bool setWalletLocked(bool locked, const SecureString &passPhrase=SecureString()); bool changePassphrase(const SecureString &oldPass, const SecureString &newPass); - // RAI object for unlocking wallet, returned by requestUnlock() + // RAII object for unlocking wallet, returned by requestUnlock() class UnlockContext { public: @@ -187,7 +188,6 @@ class WalletModel : public QObject uint256 m_cached_last_update_tip{}; void subscribeToCoreSignals(); - void unsubscribeFromCoreSignals(); void checkBalanceChanged(const interfaces::WalletBalances& new_balances); Q_SIGNALS: From 6471fb5a73acdaf52081686931dbb10bdfc1ebef Mon Sep 17 00:00:00 2001 From: Hennadii Stepanov <32963518+hebasto@users.noreply.github.com> Date: Thu, 26 May 2022 13:28:17 +0200 Subject: [PATCH 2/4] Skip manual signal disconnection in `~TransactionTableModel()` dtor A boost::signals2::scoped_connection automatically disconnects on its destruction. https://www.boost.org/doc/libs/1_64_0/doc/html/boost/signals2/scoped_connection.html --- src/qt/transactiontablemodel.cpp | 8 -------- src/qt/transactiontablemodel.h | 1 - 2 files changed, 9 deletions(-) diff --git a/src/qt/transactiontablemodel.cpp b/src/qt/transactiontablemodel.cpp index 4312b3cd24d..9497d54ed3c 100644 --- a/src/qt/transactiontablemodel.cpp +++ b/src/qt/transactiontablemodel.cpp @@ -266,7 +266,6 @@ TransactionTableModel::TransactionTableModel(const PlatformStyle *_platformStyle TransactionTableModel::~TransactionTableModel() { - unsubscribeFromCoreSignals(); delete priv; } @@ -754,10 +753,3 @@ void TransactionTableModel::subscribeToCoreSignals() priv->DispatchNotifications(); }); } - -void TransactionTableModel::unsubscribeFromCoreSignals() -{ - // Disconnect signals from wallet - m_handler_transaction_changed->disconnect(); - m_handler_show_progress->disconnect(); -} diff --git a/src/qt/transactiontablemodel.h b/src/qt/transactiontablemodel.h index f8576edd59c..5d9514b9128 100644 --- a/src/qt/transactiontablemodel.h +++ b/src/qt/transactiontablemodel.h @@ -93,7 +93,6 @@ class TransactionTableModel : public QAbstractTableModel const PlatformStyle *platformStyle; void subscribeToCoreSignals(); - void unsubscribeFromCoreSignals(); QString lookupAddress(const std::string &address, bool tooltip) const; QVariant addressColor(const TransactionRecord *wtx) const; From 611ced8714f77190949f7217b382868dcf431b73 Mon Sep 17 00:00:00 2001 From: Hennadii Stepanov <32963518+hebasto@users.noreply.github.com> Date: Thu, 26 May 2022 13:28:53 +0200 Subject: [PATCH 3/4] Skip manual signal disconnection in `~BitcoinGUI()` dtor A boost::signals2::scoped_connection automatically disconnects on its destruction. https://www.boost.org/doc/libs/1_64_0/doc/html/boost/signals2/scoped_connection.html --- src/qt/bitcoingui.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp index bfcdf6f3164..c9a32dcd90b 100644 --- a/src/qt/bitcoingui.cpp +++ b/src/qt/bitcoingui.cpp @@ -228,9 +228,6 @@ BitcoinGUI::BitcoinGUI(interfaces::Node& node, const PlatformStyle *_platformSty BitcoinGUI::~BitcoinGUI() { - // Unsubscribe from notifications from core - unsubscribeFromCoreSignals(); - QSettings settings; settings.setValue("MainWindowGeometry", saveGeometry()); if(trayIcon) // Hide tray icon, as deleting will let it linger until quit (on Ubuntu) From 512072f9c969b414a71cec56e348ef6136a31385 Mon Sep 17 00:00:00 2001 From: Hennadii Stepanov <32963518+hebasto@users.noreply.github.com> Date: Thu, 26 May 2022 13:35:35 +0200 Subject: [PATCH 4/4] Skip manual signal disconnection in `~ClientModel()` dtor A boost::signals2::scoped_connection automatically disconnects on its destruction. https://www.boost.org/doc/libs/1_64_0/doc/html/boost/signals2/scoped_connection.html --- src/qt/clientmodel.cpp | 13 ------------- src/qt/clientmodel.h | 1 - 2 files changed, 14 deletions(-) diff --git a/src/qt/clientmodel.cpp b/src/qt/clientmodel.cpp index f41da519dfc..f33a741f7be 100644 --- a/src/qt/clientmodel.cpp +++ b/src/qt/clientmodel.cpp @@ -69,8 +69,6 @@ ClientModel::ClientModel(interfaces::Node& node, OptionsModel *_optionsModel, QO ClientModel::~ClientModel() { - unsubscribeFromCoreSignals(); - m_thread->quit(); m_thread->wait(); } @@ -272,17 +270,6 @@ void ClientModel::subscribeToCoreSignals() }); } -void ClientModel::unsubscribeFromCoreSignals() -{ - m_handler_show_progress->disconnect(); - m_handler_notify_num_connections_changed->disconnect(); - m_handler_notify_network_active_changed->disconnect(); - m_handler_notify_alert_changed->disconnect(); - m_handler_banned_list_changed->disconnect(); - m_handler_notify_block_tip->disconnect(); - m_handler_notify_header_tip->disconnect(); -} - bool ClientModel::getProxyInfo(std::string& ip_port) const { Proxy ipv4, ipv6; diff --git a/src/qt/clientmodel.h b/src/qt/clientmodel.h index b10ffb4523b..386136bed95 100644 --- a/src/qt/clientmodel.h +++ b/src/qt/clientmodel.h @@ -107,7 +107,6 @@ class ClientModel : public QObject void TipChanged(SynchronizationState sync_state, interfaces::BlockTip tip, double verification_progress, bool header); void subscribeToCoreSignals(); - void unsubscribeFromCoreSignals(); Q_SIGNALS: void numConnectionsChanged(int count);