Merge #10995: Fix resendwallettransactions assert failure if -walletbroadcast=0
01699fb
Fix resendwallettransactions assert failure if -walletbroadcast=0 (Matt Corallo)
Pull request description:
This fixes #10981 in my preferred way.
Tree-SHA512: 2e43d3ac78d13c5d59db23a82c76c722cc3344767a8237617080e489296d27a98bb1b3bd469b2c9b289b57a9da3709c90448d7a23bcc2e1dfb791c4fd16be015
This commit is contained in:
commit
fa64636948
3 changed files with 8 additions and 0 deletions
|
@ -2589,6 +2589,7 @@ UniValue resendwallettransactions(const JSONRPCRequest& request)
|
||||||
"Immediately re-broadcast unconfirmed wallet transactions to all peers.\n"
|
"Immediately re-broadcast unconfirmed wallet transactions to all peers.\n"
|
||||||
"Intended only for testing; the wallet code periodically re-broadcasts\n"
|
"Intended only for testing; the wallet code periodically re-broadcasts\n"
|
||||||
"automatically.\n"
|
"automatically.\n"
|
||||||
|
"Returns an RPC error if -walletbroadcast is set to false.\n"
|
||||||
"Returns array of transaction ids that were re-broadcast.\n"
|
"Returns array of transaction ids that were re-broadcast.\n"
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -2597,6 +2598,10 @@ UniValue resendwallettransactions(const JSONRPCRequest& request)
|
||||||
|
|
||||||
LOCK2(cs_main, pwallet->cs_wallet);
|
LOCK2(cs_main, pwallet->cs_wallet);
|
||||||
|
|
||||||
|
if (!pwallet->GetBroadcastTransactions()) {
|
||||||
|
throw JSONRPCError(RPC_INVALID_REQUEST, "Error: Wallet transaction broadcasting is disabled with -walletbroadcast");
|
||||||
|
}
|
||||||
|
|
||||||
std::vector<uint256> txids = pwallet->ResendWalletTransactionsBefore(GetTime(), g_connman.get());
|
std::vector<uint256> txids = pwallet->ResendWalletTransactionsBefore(GetTime(), g_connman.get());
|
||||||
UniValue result(UniValue::VARR);
|
UniValue result(UniValue::VARR);
|
||||||
for (const uint256& txid : txids)
|
for (const uint256& txid : txids)
|
||||||
|
|
|
@ -1868,6 +1868,7 @@ std::vector<uint256> CWallet::ResendWalletTransactionsBefore(int64_t nTime, CCon
|
||||||
std::vector<uint256> result;
|
std::vector<uint256> result;
|
||||||
|
|
||||||
LOCK(cs_wallet);
|
LOCK(cs_wallet);
|
||||||
|
|
||||||
// Sort them in chronological order
|
// Sort them in chronological order
|
||||||
std::multimap<unsigned int, CWalletTx*> mapSorted;
|
std::multimap<unsigned int, CWalletTx*> mapSorted;
|
||||||
for (std::pair<const uint256, CWalletTx>& item : mapWallet)
|
for (std::pair<const uint256, CWalletTx>& item : mapWallet)
|
||||||
|
|
|
@ -470,6 +470,7 @@ public:
|
||||||
int64_t GetTxTime() const;
|
int64_t GetTxTime() const;
|
||||||
int GetRequestCount() const;
|
int GetRequestCount() const;
|
||||||
|
|
||||||
|
// RelayWalletTransaction may only be called if fBroadcastTransactions!
|
||||||
bool RelayWalletTransaction(CConnman* connman);
|
bool RelayWalletTransaction(CConnman* connman);
|
||||||
|
|
||||||
std::set<uint256> GetConflicts() const;
|
std::set<uint256> GetConflicts() const;
|
||||||
|
@ -937,6 +938,7 @@ public:
|
||||||
CBlockIndex* ScanForWalletTransactions(CBlockIndex* pindexStart, bool fUpdate = false);
|
CBlockIndex* ScanForWalletTransactions(CBlockIndex* pindexStart, bool fUpdate = false);
|
||||||
void ReacceptWalletTransactions();
|
void ReacceptWalletTransactions();
|
||||||
void ResendWalletTransactions(int64_t nBestBlockTime, CConnman* connman) override;
|
void ResendWalletTransactions(int64_t nBestBlockTime, CConnman* connman) override;
|
||||||
|
// ResendWalletTransactionsBefore may only be called if fBroadcastTransactions!
|
||||||
std::vector<uint256> ResendWalletTransactionsBefore(int64_t nTime, CConnman* connman);
|
std::vector<uint256> ResendWalletTransactionsBefore(int64_t nTime, CConnman* connman);
|
||||||
CAmount GetBalance() const;
|
CAmount GetBalance() const;
|
||||||
CAmount GetUnconfirmedBalance() const;
|
CAmount GetUnconfirmedBalance() const;
|
||||||
|
|
Loading…
Reference in a new issue