Merge #7056: Save last db read
8504867 Save the last unnecessary database read (Alex Morcos)
This commit is contained in:
parent
4ecbedbe74
commit
996f5103a0
@ -117,11 +117,17 @@ CCoinsModifier CCoinsViewCache::ModifyCoins(const uint256 &txid) {
|
||||
return CCoinsModifier(*this, ret.first, cachedCoinUsage);
|
||||
}
|
||||
|
||||
CCoinsModifier CCoinsViewCache::ModifyNewCoins(const uint256 &txid) {
|
||||
// ModifyNewCoins has to know whether the new outputs its creating are for a
|
||||
// coinbase or not. If they are for a coinbase, it can not mark them as fresh.
|
||||
// This is to ensure that the historical duplicate coinbases before BIP30 was
|
||||
// in effect will still be properly overwritten when spent.
|
||||
CCoinsModifier CCoinsViewCache::ModifyNewCoins(const uint256 &txid, bool coinbase) {
|
||||
assert(!hasModifier);
|
||||
std::pair<CCoinsMap::iterator, bool> ret = cacheCoins.insert(std::make_pair(txid, CCoinsCacheEntry()));
|
||||
ret.first->second.coins.Clear();
|
||||
if (!coinbase) {
|
||||
ret.first->second.flags = CCoinsCacheEntry::FRESH;
|
||||
}
|
||||
ret.first->second.flags |= CCoinsCacheEntry::DIRTY;
|
||||
return CCoinsModifier(*this, ret.first, 0);
|
||||
}
|
||||
|
@ -435,7 +435,7 @@ public:
|
||||
* would not properly overwrite the first coinbase of the pair. Simultaneous modifications
|
||||
* are not allowed.
|
||||
*/
|
||||
CCoinsModifier ModifyNewCoins(const uint256 &txid);
|
||||
CCoinsModifier ModifyNewCoins(const uint256 &txid, bool coinbase);
|
||||
|
||||
/**
|
||||
* Push the modifications applied to this cache to its base.
|
||||
|
@ -1445,17 +1445,9 @@ void UpdateCoins(const CTransaction& tx, CValidationState &state, CCoinsViewCach
|
||||
undo.nVersion = coins->nVersion;
|
||||
}
|
||||
}
|
||||
}
|
||||
// add outputs
|
||||
inputs.ModifyNewCoins(tx.GetHash())->FromTx(tx, nHeight);
|
||||
}
|
||||
else {
|
||||
// add outputs for coinbase tx
|
||||
// In this case call the full ModifyCoins which will do a database
|
||||
// lookup to be sure the coins do not already exist otherwise we do not
|
||||
// know whether to mark them fresh or not. We want the duplicate coinbases
|
||||
// before BIP30 to still be properly overwritten.
|
||||
inputs.ModifyCoins(tx.GetHash())->FromTx(tx, nHeight);
|
||||
}
|
||||
inputs.ModifyNewCoins(tx.GetHash(), tx.IsCoinBase())->FromTx(tx, nHeight);
|
||||
}
|
||||
|
||||
void UpdateCoins(const CTransaction& tx, CValidationState &state, CCoinsViewCache &inputs, int nHeight)
|
||||
|
Loading…
Reference in New Issue
Block a user