@@ -1076,32 +1076,34 @@ MempoolAcceptResult MemPoolAccept::AcceptSingleTransaction(const CTransactionRef
1076
1076
1077
1077
/* * (try to) add transaction to memory pool with a specified acceptance time **/
1078
1078
static MempoolAcceptResult AcceptToMemoryPoolWithTime (const CChainParams& chainparams, CTxMemPool& pool,
1079
+ CChainState& active_chainstate,
1079
1080
const CTransactionRef &tx, int64_t nAcceptTime,
1080
1081
bool bypass_limits, bool test_accept)
1081
1082
EXCLUSIVE_LOCKS_REQUIRED(cs_main)
1082
1083
{
1083
1084
std::vector<COutPoint> coins_to_uncache;
1084
1085
MemPoolAccept::ATMPArgs args { chainparams, nAcceptTime, bypass_limits, coins_to_uncache, test_accept };
1085
1086
1086
- const MempoolAcceptResult result = MemPoolAccept (pool, ::ChainstateActive ()).AcceptSingleTransaction (tx, args);
1087
+ assert (std::addressof (::ChainstateActive ()) == std::addressof (active_chainstate));
1088
+ const MempoolAcceptResult result = MemPoolAccept (pool, active_chainstate).AcceptSingleTransaction (tx, args);
1087
1089
if (result.m_result_type != MempoolAcceptResult::ResultType::VALID) {
1088
1090
// Remove coins that were not present in the coins cache before calling ATMPW;
1089
1091
// this is to prevent memory DoS in case we receive a large number of
1090
1092
// invalid transactions that attempt to overrun the in-memory coins cache
1091
1093
// (`CCoinsViewCache::cacheCoins`).
1092
1094
1093
1095
for (const COutPoint& hashTx : coins_to_uncache)
1094
- ::ChainstateActive () .CoinsTip().Uncache(hashTx);
1096
+ active_chainstate .CoinsTip ().Uncache (hashTx);
1095
1097
}
1096
1098
// After we've (potentially) uncached entries, ensure our coins cache is still within its size limits
1097
1099
BlockValidationState state_dummy;
1098
- ::ChainstateActive () .FlushStateToDisk(chainparams, state_dummy, FlushStateMode::PERIODIC);
1100
+ active_chainstate .FlushStateToDisk (chainparams, state_dummy, FlushStateMode::PERIODIC);
1099
1101
return result;
1100
1102
}
1101
1103
1102
1104
MempoolAcceptResult AcceptToMemoryPool (CTxMemPool& pool, const CTransactionRef &tx, bool bypass_limits, bool test_accept)
1103
1105
{
1104
- return AcceptToMemoryPoolWithTime (Params (), pool, tx, GetTime (), bypass_limits, test_accept);
1106
+ return AcceptToMemoryPoolWithTime (Params (), pool, :: ChainstateActive (), tx, GetTime (), bypass_limits, test_accept);
1105
1107
}
1106
1108
1107
1109
CTransactionRef GetTransaction (const CBlockIndex* const block_index, const CTxMemPool* const mempool, const uint256& hash, const Consensus::Params& consensusParams, uint256& hashBlock)
@@ -5050,7 +5052,7 @@ bool LoadMempool(CTxMemPool& pool)
5050
5052
}
5051
5053
if (nTime > nNow - nExpiryTimeout) {
5052
5054
LOCK (cs_main);
5053
- if (AcceptToMemoryPoolWithTime (chainparams, pool, tx, nTime, false /* bypass_limits */ ,
5055
+ if (AcceptToMemoryPoolWithTime (chainparams, pool, :: ChainstateActive (), tx, nTime, false /* bypass_limits */ ,
5054
5056
false /* test_accept */ ).m_result_type == MempoolAcceptResult::ResultType::VALID) {
5055
5057
++count;
5056
5058
} else {
0 commit comments