Browse Source

Bugfix: actually use CCoinsViewMemPool

tags/v0.15.1
Pieter Wuille 8 years ago
parent
commit
4afc0b5411
1 changed files with 14 additions and 2 deletions
  1. 14
    2
      src/main.cpp

+ 14
- 2
src/main.cpp View File

@@ -691,7 +691,13 @@ bool CTxMemPool::accept(CTransaction &tx, bool fCheckInputs,

if (fCheckInputs)
{
CCoinsViewCache &view = *pcoinsTip;
CCoinsView dummy;
CCoinsViewCache view(dummy);

{
LOCK(cs);
CCoinsViewMemPool viewMemPool(*pcoinsTip, *this);
view.SetBackend(viewMemPool);

// do we already have it?
if (view.HaveCoins(hash))
@@ -711,6 +717,13 @@ bool CTxMemPool::accept(CTransaction &tx, bool fCheckInputs,
// are the actual inputs available?
if (!tx.HaveInputs(view))
return error("CTxMemPool::accept() : inputs already spent");
// Bring the best block into scope
view.GetBestBlock();

// we have all inputs cached now, so switch back to dummy, so we don't need to keep lock on mempool
view.SetBackend(dummy);
}

// Check for non-standard pay-to-script-hash in inputs
if (!tx.AreInputsStandard(view) && !fTestNet)
@@ -741,7 +754,6 @@ bool CTxMemPool::accept(CTransaction &tx, bool fCheckInputs,
int64 nNow = GetTime();

{
LOCK(cs);
// Use an exponentially decaying ~10-minute window:
dFreeCount *= pow(1.0 - 1.0/600.0, (double)(nNow - nLastTime));
nLastTime = nNow;

Loading…
Cancel
Save