Merge #16349: qt: Remove redundant WalletController::addWallet slot

6285a318d7 Remove redundant WalletController::addWallet slot (Hennadii Stepanov)

Pull request description:

  ~~Fix #15453.~~ It is fixed by https://github.com/bitcoin/bitcoin/pull/16348#issuecomment-509308347

  The _only_ reason of these lines on master (8c69fae944)
  2679bb8919/src/qt/walletcontroller.cpp (L121-L128)
  is to `Q_EMIT walletAdded(wallet_model);` in a thread-safe manner;

  This PR makes this in a line of code:
  1b83875006/src/qt/walletcontroller.cpp (L121)

  EDITED:
  To establish the ownership of a new `WalletModel` object is not necessary on the master (https://github.com/bitcoin/bitcoin/pull/16349#discussion_r301679192 by **promag**).
  But:
  > it's good habit to set ownership

  And I agree. It is a safe practice.

ACKs for top commit:
  promag:
    ACK 6285a318d7.
  jonasschnelli:
    utACK 6285a318d7
  ryanofsky:
    utACK 6285a318d7. Only change since last review is rebasing and restoring a deleted comment. I do think the comments I suggested last review would be better than this one, but this is at least better than before.

Tree-SHA512: 90370cb1fe853b84dd16c3781ba4f97f3f4deca56bba0203e457f37b3220fd13228cf8495fd882ff18b7c782c27544cc2e7a88aaec5b69b9ef6d8626bdaaf332
This commit is contained in:
Jonas Schnelli 2019-08-12 14:15:48 +02:00
commit 9059a6f248
No known key found for this signature in database
GPG key ID: 1EB776BB03C7922D
2 changed files with 4 additions and 18 deletions

View file

@ -99,6 +99,9 @@ WalletModel* WalletController::getOrCreateWallet(std::unique_ptr<interfaces::Wal
// Instantiate model and register it.
WalletModel* wallet_model = new WalletModel(std::move(wallet), m_node, m_platform_style, m_options_model, nullptr);
// Handler callback runs in a different thread so fix wallet model thread affinity.
wallet_model->moveToThread(thread());
wallet_model->setParent(this);
m_wallets.push_back(wallet_model);
connect(wallet_model, &WalletModel::unload, [this, wallet_model] {
@ -119,25 +122,11 @@ WalletModel* WalletController::getOrCreateWallet(std::unique_ptr<interfaces::Wal
connect(wallet_model, &WalletModel::coinsSent, this, &WalletController::coinsSent);
// Notify walletAdded signal on the GUI thread.
if (QThread::currentThread() == thread()) {
addWallet(wallet_model);
} else {
// Handler callback runs in a different thread so fix wallet model thread affinity.
wallet_model->moveToThread(thread());
bool invoked = QMetaObject::invokeMethod(this, "addWallet", Qt::QueuedConnection, Q_ARG(WalletModel*, wallet_model));
assert(invoked);
}
Q_EMIT walletAdded(wallet_model);
return wallet_model;
}
void WalletController::addWallet(WalletModel* wallet_model)
{
// Take ownership of the wallet model and register it.
wallet_model->setParent(this);
Q_EMIT walletAdded(wallet_model);
}
void WalletController::removeAndDeleteWallet(WalletModel* wallet_model)
{
// Unregister wallet model.

View file

@ -50,9 +50,6 @@ public:
OpenWalletActivity* openWallet(const std::string& name, QWidget* parent = nullptr);
void closeWallet(WalletModel* wallet_model, QWidget* parent = nullptr);
private Q_SLOTS:
void addWallet(WalletModel* wallet_model);
Q_SIGNALS:
void walletAdded(WalletModel* wallet_model);
void walletRemoved(WalletModel* wallet_model);