mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-06-15 11:21:32 +02:00
Cancel wallet balance timer when shutdown requested
This doesn't fix any current problem, but it makes balance checking code less fragile, and prevents use-after free travis error in next commit: https://travis-ci.org/github/bitcoin/bitcoin/jobs/675367629#L4240
This commit is contained in:
parent
83f69fab3a
commit
2bc9b92ed8
@ -38,14 +38,15 @@
|
|||||||
WalletModel::WalletModel(std::unique_ptr<interfaces::Wallet> wallet, ClientModel& client_model, const PlatformStyle *platformStyle, QObject *parent) :
|
WalletModel::WalletModel(std::unique_ptr<interfaces::Wallet> wallet, ClientModel& client_model, const PlatformStyle *platformStyle, QObject *parent) :
|
||||||
QObject(parent),
|
QObject(parent),
|
||||||
m_wallet(std::move(wallet)),
|
m_wallet(std::move(wallet)),
|
||||||
m_client_model(client_model),
|
m_client_model(&client_model),
|
||||||
m_node(client_model.node()),
|
m_node(client_model.node()),
|
||||||
optionsModel(client_model.getOptionsModel()),
|
optionsModel(client_model.getOptionsModel()),
|
||||||
addressTableModel(nullptr),
|
addressTableModel(nullptr),
|
||||||
transactionTableModel(nullptr),
|
transactionTableModel(nullptr),
|
||||||
recentRequestsTableModel(nullptr),
|
recentRequestsTableModel(nullptr),
|
||||||
cachedEncryptionStatus(Unencrypted),
|
cachedEncryptionStatus(Unencrypted),
|
||||||
cachedNumBlocks(0)
|
cachedNumBlocks(0),
|
||||||
|
timer(new QTimer(this))
|
||||||
{
|
{
|
||||||
fHaveWatchOnly = m_wallet->haveWatchOnly();
|
fHaveWatchOnly = m_wallet->haveWatchOnly();
|
||||||
addressTableModel = new AddressTableModel(this);
|
addressTableModel = new AddressTableModel(this);
|
||||||
@ -63,11 +64,16 @@ WalletModel::~WalletModel()
|
|||||||
void WalletModel::startPollBalance()
|
void WalletModel::startPollBalance()
|
||||||
{
|
{
|
||||||
// This timer will be fired repeatedly to update the balance
|
// This timer will be fired repeatedly to update the balance
|
||||||
QTimer* timer = new QTimer(this);
|
|
||||||
connect(timer, &QTimer::timeout, this, &WalletModel::pollBalanceChanged);
|
connect(timer, &QTimer::timeout, this, &WalletModel::pollBalanceChanged);
|
||||||
timer->start(MODEL_UPDATE_DELAY);
|
timer->start(MODEL_UPDATE_DELAY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WalletModel::setClientModel(ClientModel* client_model)
|
||||||
|
{
|
||||||
|
m_client_model = client_model;
|
||||||
|
if (!m_client_model) timer->stop();
|
||||||
|
}
|
||||||
|
|
||||||
void WalletModel::updateStatus()
|
void WalletModel::updateStatus()
|
||||||
{
|
{
|
||||||
EncryptionStatus newEncryptionStatus = getEncryptionStatus();
|
EncryptionStatus newEncryptionStatus = getEncryptionStatus();
|
||||||
|
@ -144,6 +144,7 @@ public:
|
|||||||
|
|
||||||
interfaces::Node& node() const { return m_node; }
|
interfaces::Node& node() const { return m_node; }
|
||||||
interfaces::Wallet& wallet() const { return *m_wallet; }
|
interfaces::Wallet& wallet() const { return *m_wallet; }
|
||||||
|
void setClientModel(ClientModel* client_model);
|
||||||
int getNumBlocks() const { return cachedNumBlocks; }
|
int getNumBlocks() const { return cachedNumBlocks; }
|
||||||
|
|
||||||
QString getWalletName() const;
|
QString getWalletName() const;
|
||||||
@ -161,7 +162,7 @@ private:
|
|||||||
std::unique_ptr<interfaces::Handler> m_handler_show_progress;
|
std::unique_ptr<interfaces::Handler> m_handler_show_progress;
|
||||||
std::unique_ptr<interfaces::Handler> m_handler_watch_only_changed;
|
std::unique_ptr<interfaces::Handler> m_handler_watch_only_changed;
|
||||||
std::unique_ptr<interfaces::Handler> m_handler_can_get_addrs_changed;
|
std::unique_ptr<interfaces::Handler> m_handler_can_get_addrs_changed;
|
||||||
ClientModel& m_client_model;
|
ClientModel* m_client_model;
|
||||||
interfaces::Node& m_node;
|
interfaces::Node& m_node;
|
||||||
|
|
||||||
bool fHaveWatchOnly;
|
bool fHaveWatchOnly;
|
||||||
@ -179,6 +180,7 @@ private:
|
|||||||
interfaces::WalletBalances m_cached_balances;
|
interfaces::WalletBalances m_cached_balances;
|
||||||
EncryptionStatus cachedEncryptionStatus;
|
EncryptionStatus cachedEncryptionStatus;
|
||||||
int cachedNumBlocks;
|
int cachedNumBlocks;
|
||||||
|
QTimer* timer;
|
||||||
|
|
||||||
void subscribeToCoreSignals();
|
void subscribeToCoreSignals();
|
||||||
void unsubscribeFromCoreSignals();
|
void unsubscribeFromCoreSignals();
|
||||||
|
@ -97,6 +97,7 @@ void WalletView::setClientModel(ClientModel *_clientModel)
|
|||||||
|
|
||||||
overviewPage->setClientModel(_clientModel);
|
overviewPage->setClientModel(_clientModel);
|
||||||
sendCoinsPage->setClientModel(_clientModel);
|
sendCoinsPage->setClientModel(_clientModel);
|
||||||
|
if (walletModel) walletModel->setClientModel(_clientModel);
|
||||||
}
|
}
|
||||||
|
|
||||||
void WalletView::setWalletModel(WalletModel *_walletModel)
|
void WalletView::setWalletModel(WalletModel *_walletModel)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user