Get the set of now-uncacheable-txn from CTxMemPool::TrimToSize
This commit is contained in:
parent
74d0f90262
commit
b2e74bd292
2 changed files with 25 additions and 4 deletions
|
@ -944,7 +944,7 @@ void CTxMemPool::trackPackageRemoved(const CFeeRate& rate) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CTxMemPool::TrimToSize(size_t sizelimit) {
|
void CTxMemPool::TrimToSize(size_t sizelimit, std::vector<uint256>* pvNoSpendsRemaining) {
|
||||||
LOCK(cs);
|
LOCK(cs);
|
||||||
|
|
||||||
unsigned nTxnRemoved = 0;
|
unsigned nTxnRemoved = 0;
|
||||||
|
@ -963,8 +963,26 @@ void CTxMemPool::TrimToSize(size_t sizelimit) {
|
||||||
|
|
||||||
setEntries stage;
|
setEntries stage;
|
||||||
CalculateDescendants(mapTx.project<0>(it), stage);
|
CalculateDescendants(mapTx.project<0>(it), stage);
|
||||||
RemoveStaged(stage);
|
|
||||||
nTxnRemoved += stage.size();
|
nTxnRemoved += stage.size();
|
||||||
|
|
||||||
|
std::vector<CTransaction> txn;
|
||||||
|
if (pvNoSpendsRemaining) {
|
||||||
|
txn.reserve(stage.size());
|
||||||
|
BOOST_FOREACH(txiter it, stage)
|
||||||
|
txn.push_back(it->GetTx());
|
||||||
|
}
|
||||||
|
RemoveStaged(stage);
|
||||||
|
if (pvNoSpendsRemaining) {
|
||||||
|
BOOST_FOREACH(const CTransaction& tx, txn) {
|
||||||
|
BOOST_FOREACH(const CTxIn& txin, tx.vin) {
|
||||||
|
if (exists(txin.prevout.hash))
|
||||||
|
continue;
|
||||||
|
std::map<COutPoint, CInPoint>::iterator it = mapNextTx.lower_bound(COutPoint(txin.prevout.hash, 0));
|
||||||
|
if (it == mapNextTx.end() || it->first.hash != txin.prevout.hash)
|
||||||
|
pvNoSpendsRemaining->push_back(txin.prevout.hash);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (maxFeeRateRemoved > CFeeRate(0))
|
if (maxFeeRateRemoved > CFeeRate(0))
|
||||||
|
|
|
@ -483,8 +483,11 @@ public:
|
||||||
*/
|
*/
|
||||||
CFeeRate GetMinFee(size_t sizelimit) const;
|
CFeeRate GetMinFee(size_t sizelimit) const;
|
||||||
|
|
||||||
/** Remove transactions from the mempool until its dynamic size is <= sizelimit. */
|
/** Remove transactions from the mempool until its dynamic size is <= sizelimit.
|
||||||
void TrimToSize(size_t sizelimit);
|
* pvNoSpendsRemaining, if set, will be populated with the list of transactions
|
||||||
|
* which are not in mempool which no longer have any spends in this mempool.
|
||||||
|
*/
|
||||||
|
void TrimToSize(size_t sizelimit, std::vector<uint256>* pvNoSpendsRemaining=NULL);
|
||||||
|
|
||||||
/** Expire all transaction (and their dependencies) in the mempool older than time. Return the number of removed transactions. */
|
/** Expire all transaction (and their dependencies) in the mempool older than time. Return the number of removed transactions. */
|
||||||
int Expire(int64_t time);
|
int Expire(int64_t time);
|
||||||
|
|
Loading…
Reference in a new issue