Fix nNextResend data race in ResubmitWalletTransactions

This commit is contained in:
MacroFake 2022-09-20 12:06:24 +02:00
parent 9f650062fc
commit fad61573ed
No known key found for this signature in database
GPG key ID: CE2B75697E69A548
2 changed files with 4 additions and 4 deletions

View file

@ -1907,7 +1907,7 @@ std::set<uint256> CWallet::GetTxConflicts(const CWalletTx& wtx) const
// mempool to relay them. On startup, we will do this for all unconfirmed // mempool to relay them. On startup, we will do this for all unconfirmed
// transactions but will not ask the mempool to relay them. We do this on startup // transactions but will not ask the mempool to relay them. We do this on startup
// to ensure that our own mempool is aware of our transactions, and to also // to ensure that our own mempool is aware of our transactions, and to also
// initialize nNextResend so that the actual rebroadcast is scheduled. There // initialize m_next_resend so that the actual rebroadcast is scheduled. There
// is a privacy side effect here as not broadcasting on startup also means that we won't // is a privacy side effect here as not broadcasting on startup also means that we won't
// inform the world of our wallet's state, particularly if the wallet (or node) is not // inform the world of our wallet's state, particularly if the wallet (or node) is not
// yet synced. // yet synced.
@ -1941,9 +1941,9 @@ void CWallet::ResubmitWalletTransactions(bool relay, bool force)
// Do this infrequently and randomly to avoid giving away // Do this infrequently and randomly to avoid giving away
// that these are our transactions. // that these are our transactions.
if (!force && GetTime() < nNextResend) return; if (!force && GetTime() < m_next_resend) return;
// resend 12-36 hours from now, ~1 day on average. // resend 12-36 hours from now, ~1 day on average.
nNextResend = GetTime() + (12 * 60 * 60) + GetRand(24 * 60 * 60); m_next_resend = GetTime() + (12 * 60 * 60) + GetRand(24 * 60 * 60);
int submitted_tx_count = 0; int submitted_tx_count = 0;

View file

@ -250,7 +250,7 @@ private:
int nWalletVersion GUARDED_BY(cs_wallet){FEATURE_BASE}; int nWalletVersion GUARDED_BY(cs_wallet){FEATURE_BASE};
/** The next scheduled rebroadcast of wallet transactions. */ /** The next scheduled rebroadcast of wallet transactions. */
int64_t nNextResend = 0; std::atomic<int64_t> m_next_resend{};
/** Whether this wallet will submit newly created transactions to the node's mempool and /** Whether this wallet will submit newly created transactions to the node's mempool and
* prompt rebroadcasts (see ResendWalletTransactions()). */ * prompt rebroadcasts (see ResendWalletTransactions()). */
bool fBroadcastTransactions = false; bool fBroadcastTransactions = false;