diff options
author | Wladimir J. van der Laan <laanwj@gmail.com> | 2014-07-24 16:46:30 +0200 |
---|---|---|
committer | Wladimir J. van der Laan <laanwj@gmail.com> | 2014-07-24 16:46:38 +0200 |
commit | 7eb3d6152febe9e19378d5e3ba4ec88450724436 (patch) | |
tree | 8e284c84c8c45360e938ac5bde980b7a4f9062ef | |
parent | ab651b2d62778d6194ad996d29e7d447f549fc38 (diff) | |
parent | ad08d0b95bd8e35b74f5f36cfa3c48ae9583b28c (diff) |
Merge pull request #4575
ad08d0b Bugfix: make CCoinsViewMemPool support pruned entries in underlying cache (Pieter Wuille)
-rw-r--r-- | src/txmempool.cpp | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/src/txmempool.cpp b/src/txmempool.cpp index ebb1369e31..164e2741a2 100644 --- a/src/txmempool.cpp +++ b/src/txmempool.cpp @@ -602,14 +602,15 @@ void CTxMemPool::ClearPrioritisation(const uint256 hash) CCoinsViewMemPool::CCoinsViewMemPool(CCoinsView &baseIn, CTxMemPool &mempoolIn) : CCoinsViewBacked(baseIn), mempool(mempoolIn) { } bool CCoinsViewMemPool::GetCoins(const uint256 &txid, CCoins &coins) { - if (base->GetCoins(txid, coins)) - return true; + // If an entry in the mempool exists, always return that one, as it's guaranteed to never + // conflict with the underlying cache, and it cannot have pruned entries (as it contains full) + // transactions. First checking the underlying cache risks returning a pruned entry instead. CTransaction tx; if (mempool.lookup(txid, tx)) { coins = CCoins(tx, MEMPOOL_HEIGHT); return true; } - return false; + return (base->GetCoins(txid, coins) && !coins.IsPruned()); } bool CCoinsViewMemPool::HaveCoins(const uint256 &txid) { |