Merge #17162: chain: Remove CBlockIndex::SetNull helper

fa0467326f chain: Set all CBlockIndex members to null, remove SetNull helper (MarcoFalke)

Pull request description:

  The first commit removes the `SetNull` helper and inlines the member initialization (C++11). See https://github.com/bitcoin/bitcoin/blob/master/doc/developer-notes.md#c-data-structures for rationale.

  <strike>The second commit adds the `cs_main` lock annotation to `RaiseValidity`. See also #17161.</strike>

ACKs for top commit:
  promag:
    Code review ACK fa0467326f.
  practicalswift:
    ACK fa0467326f -- diff still looks correct :)
  laanwj:
    ACK fa0467326f, this makes it easy to see that all fields are initialized.

Tree-SHA512: 1b2b9fb0951c03c75b9cce322b89d4ecc9a364ae78b94d91b0b4669437824394dfada820ab6f74dfac3193f602899abfdc244ae2d9351ad293f555488f03470e
This commit is contained in:
fanquake 2019-10-17 14:53:13 -04:00
commit 4daadce36c
No known key found for this signature in database
GPG Key ID: 2EEB9F5CC09526C1

View File

@ -140,91 +140,65 @@ class CBlockIndex
{ {
public: public:
//! pointer to the hash of the block, if any. Memory is owned by this CBlockIndex //! pointer to the hash of the block, if any. Memory is owned by this CBlockIndex
const uint256* phashBlock; const uint256* phashBlock{nullptr};
//! pointer to the index of the predecessor of this block //! pointer to the index of the predecessor of this block
CBlockIndex* pprev; CBlockIndex* pprev{nullptr};
//! pointer to the index of some further predecessor of this block //! pointer to the index of some further predecessor of this block
CBlockIndex* pskip; CBlockIndex* pskip{nullptr};
//! height of the entry in the chain. The genesis block has height 0 //! height of the entry in the chain. The genesis block has height 0
int nHeight; int nHeight{0};
//! Which # file this block is stored in (blk?????.dat) //! Which # file this block is stored in (blk?????.dat)
int nFile; int nFile{0};
//! Byte offset within blk?????.dat where this block's data is stored //! Byte offset within blk?????.dat where this block's data is stored
unsigned int nDataPos; unsigned int nDataPos{0};
//! Byte offset within rev?????.dat where this block's undo data is stored //! Byte offset within rev?????.dat where this block's undo data is stored
unsigned int nUndoPos; unsigned int nUndoPos{0};
//! (memory only) Total amount of work (expected number of hashes) in the chain up to and including this block //! (memory only) Total amount of work (expected number of hashes) in the chain up to and including this block
arith_uint256 nChainWork; arith_uint256 nChainWork{};
//! Number of transactions in this block. //! Number of transactions in this block.
//! Note: in a potential headers-first mode, this number cannot be relied upon //! Note: in a potential headers-first mode, this number cannot be relied upon
unsigned int nTx; unsigned int nTx{0};
//! (memory only) Number of transactions in the chain up to and including this block. //! (memory only) Number of transactions in the chain up to and including this block.
//! This value will be non-zero only if and only if transactions for this block and all its parents are available. //! This value will be non-zero only if and only if transactions for this block and all its parents are available.
//! Change to 64-bit type when necessary; won't happen before 2030 //! Change to 64-bit type when necessary; won't happen before 2030
unsigned int nChainTx; unsigned int nChainTx{0};
//! Verification status of this block. See enum BlockStatus //! Verification status of this block. See enum BlockStatus
uint32_t nStatus; uint32_t nStatus{0};
//! block header //! block header
int32_t nVersion; int32_t nVersion{0};
uint256 hashMerkleRoot; uint256 hashMerkleRoot{};
uint32_t nTime; uint32_t nTime{0};
uint32_t nBits; uint32_t nBits{0};
uint32_t nNonce; uint32_t nNonce{0};
//! (memory only) Sequential id assigned to distinguish order in which blocks are received. //! (memory only) Sequential id assigned to distinguish order in which blocks are received.
int32_t nSequenceId; int32_t nSequenceId{0};
//! (memory only) Maximum nTime in the chain up to and including this block. //! (memory only) Maximum nTime in the chain up to and including this block.
unsigned int nTimeMax; unsigned int nTimeMax{0};
void SetNull()
{
phashBlock = nullptr;
pprev = nullptr;
pskip = nullptr;
nHeight = 0;
nFile = 0;
nDataPos = 0;
nUndoPos = 0;
nChainWork = arith_uint256();
nTx = 0;
nChainTx = 0;
nStatus = 0;
nSequenceId = 0;
nTimeMax = 0;
nVersion = 0;
hashMerkleRoot = uint256();
nTime = 0;
nBits = 0;
nNonce = 0;
}
CBlockIndex() CBlockIndex()
{ {
SetNull();
} }
explicit CBlockIndex(const CBlockHeader& block) explicit CBlockIndex(const CBlockHeader& block)
: nVersion{block.nVersion},
hashMerkleRoot{block.hashMerkleRoot},
nTime{block.nTime},
nBits{block.nBits},
nNonce{block.nNonce}
{ {
SetNull();
nVersion = block.nVersion;
hashMerkleRoot = block.hashMerkleRoot;
nTime = block.nTime;
nBits = block.nBits;
nNonce = block.nNonce;
} }
FlatFilePos GetBlockPos() const { FlatFilePos GetBlockPos() const {