diff options
author | Suhas Daftuar <sdaftuar@gmail.com> | 2015-09-23 13:37:32 -0400 |
---|---|---|
committer | Suhas Daftuar <sdaftuar@gmail.com> | 2015-09-23 15:30:41 -0400 |
commit | 60de0d5826f1b848a43ec989ff712f002eddc3dc (patch) | |
tree | f30240eccceb817d58cb7a35e287f5ef979118df /src/txmempool.h | |
parent | 598b25d5ee9c08947a52824f47531208943a3c65 (diff) |
Fix mempool package tracking edge case
CalculateMemPoolAncestors was always looping over a transaction's inputs
to find in-mempool parents. When adding a new transaction, this is the
correct behavior, but when removing a transaction, we want to use the
ancestor set that would be calculated by walking mapLinks (which should
in general be the same set, except during a reorg when the mempool is
in an inconsistent state, and the mapLinks-based calculation would be the
correct one).
Diffstat (limited to 'src/txmempool.h')
-rw-r--r-- | src/txmempool.h | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/src/txmempool.h b/src/txmempool.h index f0c3f7e0f1..c0eef0dd22 100644 --- a/src/txmempool.h +++ b/src/txmempool.h @@ -392,8 +392,10 @@ public: * limitDescendantCount = max number of descendants any ancestor can have * limitDescendantSize = max size of descendants any ancestor can have * errString = populated with error reason if any limits are hit + * fSearchForParents = whether to search a tx's vin for in-mempool parents, or + * look up parents from mapLinks. Must be true for entries not in the mempool */ - bool CalculateMemPoolAncestors(const CTxMemPoolEntry &entry, setEntries &setAncestors, uint64_t limitAncestorCount, uint64_t limitAncestorSize, uint64_t limitDescendantCount, uint64_t limitDescendantSize, std::string &errString); + bool CalculateMemPoolAncestors(const CTxMemPoolEntry &entry, setEntries &setAncestors, uint64_t limitAncestorCount, uint64_t limitAncestorSize, uint64_t limitDescendantCount, uint64_t limitDescendantSize, std::string &errString, bool fSearchForParents = true); unsigned long size() { |