Skip to content

Commit d3cfe0d

Browse files
committed
gui: Avoid Wallet::GetBalance in WalletModel::pollBalanceChanged
Github-Pull: #18160 Rebased-From: 0933a37
1 parent 05f5dd9 commit d3cfe0d

File tree

3 files changed

+15
-14
lines changed

3 files changed

+15
-14
lines changed

src/interfaces/wallet.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -359,16 +359,17 @@ class WalletImpl : public Wallet
359359
}
360360
return result;
361361
}
362-
bool tryGetBalances(WalletBalances& balances, int& num_blocks) override
362+
bool tryGetBalances(WalletBalances& balances, int& num_blocks, bool force, int cached_num_blocks) override
363363
{
364364
auto locked_chain = m_wallet->chain().lock(true /* try_lock */);
365365
if (!locked_chain) return false;
366+
num_blocks = locked_chain->getHeight().get_value_or(-1);
367+
if (!force && num_blocks == cached_num_blocks) return false;
366368
TRY_LOCK(m_wallet->cs_wallet, locked_wallet);
367369
if (!locked_wallet) {
368370
return false;
369371
}
370372
balances = getBalances();
371-
num_blocks = locked_chain->getHeight().get_value_or(-1);
372373
return true;
373374
}
374375
CAmount getBalance() override { return m_wallet->GetBalance().m_mine_trusted; }

src/interfaces/wallet.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -198,8 +198,11 @@ class Wallet
198198
//! Get balances.
199199
virtual WalletBalances getBalances() = 0;
200200

201-
//! Get balances if possible without blocking.
202-
virtual bool tryGetBalances(WalletBalances& balances, int& num_blocks) = 0;
201+
//! Get balances if possible without waiting for chain and wallet locks.
202+
virtual bool tryGetBalances(WalletBalances& balances,
203+
int& num_blocks,
204+
bool force,
205+
int cached_num_blocks) = 0;
203206

204207
//! Get balance.
205208
virtual CAmount getBalance() = 0;

src/qt/walletmodel.cpp

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -77,21 +77,18 @@ void WalletModel::pollBalanceChanged()
7777
// rescan.
7878
interfaces::WalletBalances new_balances;
7979
int numBlocks = -1;
80-
if (!m_wallet->tryGetBalances(new_balances, numBlocks)) {
80+
if (!m_wallet->tryGetBalances(new_balances, numBlocks, fForceCheckBalanceChanged, cachedNumBlocks)) {
8181
return;
8282
}
8383

84-
if(fForceCheckBalanceChanged || numBlocks != cachedNumBlocks)
85-
{
86-
fForceCheckBalanceChanged = false;
84+
fForceCheckBalanceChanged = false;
8785

88-
// Balance and number of transactions might have changed
89-
cachedNumBlocks = numBlocks;
86+
// Balance and number of transactions might have changed
87+
cachedNumBlocks = numBlocks;
9088

91-
checkBalanceChanged(new_balances);
92-
if(transactionTableModel)
93-
transactionTableModel->updateConfirmations();
94-
}
89+
checkBalanceChanged(new_balances);
90+
if(transactionTableModel)
91+
transactionTableModel->updateConfirmations();
9592
}
9693

9794
void WalletModel::checkBalanceChanged(const interfaces::WalletBalances& new_balances)

0 commit comments

Comments
 (0)