Skip to content

Commit 0933a37

Browse files
committed
gui: Avoid Wallet::GetBalance in WalletModel::pollBalanceChanged
1 parent 2a2631f commit 0933a37

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
@@ -380,16 +380,17 @@ class WalletImpl : public Wallet
380380
}
381381
return result;
382382
}
383-
bool tryGetBalances(WalletBalances& balances, int& num_blocks) override
383+
bool tryGetBalances(WalletBalances& balances, int& num_blocks, bool force, int cached_num_blocks) override
384384
{
385385
auto locked_chain = m_wallet->chain().lock(true /* try_lock */);
386386
if (!locked_chain) return false;
387+
num_blocks = locked_chain->getHeight().get_value_or(-1);
388+
if (!force && num_blocks == cached_num_blocks) return false;
387389
TRY_LOCK(m_wallet->cs_wallet, locked_wallet);
388390
if (!locked_wallet) {
389391
return false;
390392
}
391393
balances = getBalances();
392-
num_blocks = locked_chain->getHeight().get_value_or(-1);
393394
return true;
394395
}
395396
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
@@ -201,8 +201,11 @@ class Wallet
201201
//! Get balances.
202202
virtual WalletBalances getBalances() = 0;
203203

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

207210
//! Get balance.
208211
virtual CAmount getBalance() = 0;

src/qt/walletmodel.cpp

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

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

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

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

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

0 commit comments

Comments
 (0)