Merge #15144: [refactor] CNode: Use C++11 default member initializers
fac2f5ecae
Use C++11 default member initializers (MarcoFalke)
Pull request description:
The second and last change on this topic (c.f. #15109). Split up because the diff would otherwise interleave, making review harder than necessary.
This is not a stylistic change, but a change that avoids bugs such as:
* fix uninitialized read when stringifying an addrLocal #14728
* qt: Initialize members in WalletModel #12426
* net: correctly initialize nMinPingUsecTime #6636
* ...
Tree-SHA512: 547ae72b87aeaed5890eb5fdcff612bfc93354632b238d89e1e1c0487187f39609bcdc537ef21345e0aea8cfcf1ea48da432d672c5386dd87cf58742446a86b1
This commit is contained in:
commit
070eaf7fe5
2 changed files with 45 additions and 87 deletions
48
src/net.cpp
48
src/net.cpp
|
@ -2780,8 +2780,8 @@ int CConnman::GetBestHeight() const
|
|||
|
||||
unsigned int CConnman::GetReceiveFloodSize() const { return nReceiveFloodSize; }
|
||||
|
||||
CNode::CNode(NodeId idIn, ServiceFlags nLocalServicesIn, int nMyStartingHeightIn, SOCKET hSocketIn, const CAddress& addrIn, uint64_t nKeyedNetGroupIn, uint64_t nLocalHostNonceIn, const CAddress &addrBindIn, const std::string& addrNameIn, bool fInboundIn) :
|
||||
nTimeConnected(GetSystemTimeInSeconds()),
|
||||
CNode::CNode(NodeId idIn, ServiceFlags nLocalServicesIn, int nMyStartingHeightIn, SOCKET hSocketIn, const CAddress& addrIn, uint64_t nKeyedNetGroupIn, uint64_t nLocalHostNonceIn, const CAddress& addrBindIn, const std::string& addrNameIn, bool fInboundIn)
|
||||
: nTimeConnected(GetSystemTimeInSeconds()),
|
||||
addr(addrIn),
|
||||
addrBind(addrBindIn),
|
||||
fInbound(fInboundIn),
|
||||
|
@ -2791,56 +2791,14 @@ CNode::CNode(NodeId idIn, ServiceFlags nLocalServicesIn, int nMyStartingHeightIn
|
|||
id(idIn),
|
||||
nLocalHostNonce(nLocalHostNonceIn),
|
||||
nLocalServices(nLocalServicesIn),
|
||||
nMyStartingHeight(nMyStartingHeightIn),
|
||||
nSendVersion(0)
|
||||
nMyStartingHeight(nMyStartingHeightIn)
|
||||
{
|
||||
nServices = NODE_NONE;
|
||||
hSocket = hSocketIn;
|
||||
nRecvVersion = INIT_PROTO_VERSION;
|
||||
nLastSend = 0;
|
||||
nLastRecv = 0;
|
||||
nSendBytes = 0;
|
||||
nRecvBytes = 0;
|
||||
nTimeOffset = 0;
|
||||
addrName = addrNameIn == "" ? addr.ToStringIPPort() : addrNameIn;
|
||||
nVersion = 0;
|
||||
strSubVer = "";
|
||||
fWhitelisted = false;
|
||||
fOneShot = false;
|
||||
m_manual_connection = false;
|
||||
fClient = false; // set by version message
|
||||
m_limited_node = false; // set by version message
|
||||
fFeeler = false;
|
||||
fSuccessfullyConnected = false;
|
||||
fDisconnect = false;
|
||||
nRefCount = 0;
|
||||
nSendSize = 0;
|
||||
nSendOffset = 0;
|
||||
hashContinue = uint256();
|
||||
nStartingHeight = -1;
|
||||
filterInventoryKnown.reset();
|
||||
fSendMempool = false;
|
||||
fGetAddr = false;
|
||||
nNextLocalAddrSend = 0;
|
||||
nNextAddrSend = 0;
|
||||
nNextInvSend = 0;
|
||||
fRelayTxes = false;
|
||||
fSentAddr = false;
|
||||
pfilter = MakeUnique<CBloomFilter>();
|
||||
timeLastMempoolReq = 0;
|
||||
nLastBlockTime = 0;
|
||||
nLastTXTime = 0;
|
||||
nPingNonceSent = 0;
|
||||
nPingUsecStart = 0;
|
||||
nPingUsecTime = 0;
|
||||
fPingQueued = false;
|
||||
nMinPingUsecTime = std::numeric_limits<int64_t>::max();
|
||||
minFeeFilter = 0;
|
||||
lastSentFeeFilter = 0;
|
||||
nextSendTimeFeeFilter = 0;
|
||||
fPauseRecv = false;
|
||||
fPauseSend = false;
|
||||
nProcessQueueSize = 0;
|
||||
|
||||
for (const std::string &msg : getAllNetMessageTypes())
|
||||
mapRecvBytesPerMsgCmd[msg] = 0;
|
||||
|
|
84
src/net.h
84
src/net.h
|
@ -646,11 +646,11 @@ class CNode
|
|||
friend class CConnman;
|
||||
public:
|
||||
// socket
|
||||
std::atomic<ServiceFlags> nServices;
|
||||
std::atomic<ServiceFlags> nServices{NODE_NONE};
|
||||
SOCKET hSocket GUARDED_BY(cs_hSocket);
|
||||
size_t nSendSize; // total size of all vSendMsg entries
|
||||
size_t nSendOffset; // offset inside the first vSendMsg already sent
|
||||
uint64_t nSendBytes GUARDED_BY(cs_vSend);
|
||||
size_t nSendSize{0}; // total size of all vSendMsg entries
|
||||
size_t nSendOffset{0}; // offset inside the first vSendMsg already sent
|
||||
uint64_t nSendBytes GUARDED_BY(cs_vSend){0};
|
||||
std::deque<std::vector<unsigned char>> vSendMsg GUARDED_BY(cs_vSend);
|
||||
CCriticalSection cs_vSend;
|
||||
CCriticalSection cs_hSocket;
|
||||
|
@ -658,52 +658,52 @@ public:
|
|||
|
||||
CCriticalSection cs_vProcessMsg;
|
||||
std::list<CNetMessage> vProcessMsg GUARDED_BY(cs_vProcessMsg);
|
||||
size_t nProcessQueueSize;
|
||||
size_t nProcessQueueSize{0};
|
||||
|
||||
CCriticalSection cs_sendProcessing;
|
||||
|
||||
std::deque<CInv> vRecvGetData;
|
||||
uint64_t nRecvBytes GUARDED_BY(cs_vRecv);
|
||||
std::atomic<int> nRecvVersion;
|
||||
uint64_t nRecvBytes GUARDED_BY(cs_vRecv){0};
|
||||
std::atomic<int> nRecvVersion{INIT_PROTO_VERSION};
|
||||
|
||||
std::atomic<int64_t> nLastSend;
|
||||
std::atomic<int64_t> nLastRecv;
|
||||
std::atomic<int64_t> nLastSend{0};
|
||||
std::atomic<int64_t> nLastRecv{0};
|
||||
const int64_t nTimeConnected;
|
||||
std::atomic<int64_t> nTimeOffset;
|
||||
std::atomic<int64_t> nTimeOffset{0};
|
||||
// Address of this peer
|
||||
const CAddress addr;
|
||||
// Bind address of our side of the connection
|
||||
const CAddress addrBind;
|
||||
std::atomic<int> nVersion;
|
||||
std::atomic<int> nVersion{0};
|
||||
// strSubVer is whatever byte array we read from the wire. However, this field is intended
|
||||
// to be printed out, displayed to humans in various forms and so on. So we sanitize it and
|
||||
// store the sanitized version in cleanSubVer. The original should be used when dealing with
|
||||
// the network or wire types and the cleaned string used when displayed or logged.
|
||||
std::string strSubVer GUARDED_BY(cs_SubVer), cleanSubVer GUARDED_BY(cs_SubVer);
|
||||
CCriticalSection cs_SubVer; // used for both cleanSubVer and strSubVer
|
||||
bool fWhitelisted; // This peer can bypass DoS banning.
|
||||
bool fFeeler; // If true this node is being used as a short lived feeler.
|
||||
bool fOneShot;
|
||||
bool m_manual_connection;
|
||||
bool fClient;
|
||||
bool m_limited_node; //after BIP159
|
||||
bool fWhitelisted{false}; // This peer can bypass DoS banning.
|
||||
bool fFeeler{false}; // If true this node is being used as a short lived feeler.
|
||||
bool fOneShot{false};
|
||||
bool m_manual_connection{false};
|
||||
bool fClient{false}; // set by version message
|
||||
bool m_limited_node{false}; //after BIP159, set by version message
|
||||
const bool fInbound;
|
||||
std::atomic_bool fSuccessfullyConnected;
|
||||
std::atomic_bool fDisconnect;
|
||||
std::atomic_bool fSuccessfullyConnected{false};
|
||||
std::atomic_bool fDisconnect{false};
|
||||
// We use fRelayTxes for two purposes -
|
||||
// a) it allows us to not relay tx invs before receiving the peer's version message
|
||||
// b) the peer may tell us in its version message that we should not relay tx invs
|
||||
// unless it loads a bloom filter.
|
||||
bool fRelayTxes GUARDED_BY(cs_filter);
|
||||
bool fSentAddr;
|
||||
bool fRelayTxes GUARDED_BY(cs_filter){false};
|
||||
bool fSentAddr{false};
|
||||
CSemaphoreGrant grantOutbound;
|
||||
mutable CCriticalSection cs_filter;
|
||||
std::unique_ptr<CBloomFilter> pfilter PT_GUARDED_BY(cs_filter);
|
||||
std::atomic<int> nRefCount;
|
||||
std::atomic<int> nRefCount{0};
|
||||
|
||||
const uint64_t nKeyedNetGroup;
|
||||
std::atomic_bool fPauseRecv;
|
||||
std::atomic_bool fPauseSend;
|
||||
std::atomic_bool fPauseRecv{false};
|
||||
std::atomic_bool fPauseSend{false};
|
||||
|
||||
protected:
|
||||
mapMsgCmdSize mapSendBytesPerMsgCmd;
|
||||
|
@ -711,15 +711,15 @@ protected:
|
|||
|
||||
public:
|
||||
uint256 hashContinue;
|
||||
std::atomic<int> nStartingHeight;
|
||||
std::atomic<int> nStartingHeight{-1};
|
||||
|
||||
// flood relay
|
||||
std::vector<CAddress> vAddrToSend;
|
||||
CRollingBloomFilter addrKnown;
|
||||
bool fGetAddr;
|
||||
bool fGetAddr{false};
|
||||
std::set<uint256> setKnown;
|
||||
int64_t nNextAddrSend GUARDED_BY(cs_sendProcessing);
|
||||
int64_t nNextLocalAddrSend GUARDED_BY(cs_sendProcessing);
|
||||
int64_t nNextAddrSend GUARDED_BY(cs_sendProcessing){0};
|
||||
int64_t nNextLocalAddrSend GUARDED_BY(cs_sendProcessing){0};
|
||||
|
||||
// inventory based relay
|
||||
CRollingBloomFilter filterInventoryKnown GUARDED_BY(cs_inventory);
|
||||
|
@ -733,35 +733,35 @@ public:
|
|||
CCriticalSection cs_inventory;
|
||||
std::set<uint256> setAskFor;
|
||||
std::multimap<int64_t, CInv> mapAskFor;
|
||||
int64_t nNextInvSend;
|
||||
int64_t nNextInvSend{0};
|
||||
// Used for headers announcements - unfiltered blocks to relay
|
||||
std::vector<uint256> vBlockHashesToAnnounce GUARDED_BY(cs_inventory);
|
||||
// Used for BIP35 mempool sending
|
||||
bool fSendMempool GUARDED_BY(cs_inventory);
|
||||
bool fSendMempool GUARDED_BY(cs_inventory){false};
|
||||
|
||||
// Last time a "MEMPOOL" request was serviced.
|
||||
std::atomic<int64_t> timeLastMempoolReq;
|
||||
std::atomic<int64_t> timeLastMempoolReq{0};
|
||||
|
||||
// Block and TXN accept times
|
||||
std::atomic<int64_t> nLastBlockTime;
|
||||
std::atomic<int64_t> nLastTXTime;
|
||||
std::atomic<int64_t> nLastBlockTime{0};
|
||||
std::atomic<int64_t> nLastTXTime{0};
|
||||
|
||||
// Ping time measurement:
|
||||
// The pong reply we're expecting, or 0 if no pong expected.
|
||||
std::atomic<uint64_t> nPingNonceSent;
|
||||
std::atomic<uint64_t> nPingNonceSent{0};
|
||||
// Time (in usec) the last ping was sent, or 0 if no ping was ever sent.
|
||||
std::atomic<int64_t> nPingUsecStart;
|
||||
std::atomic<int64_t> nPingUsecStart{0};
|
||||
// Last measured round-trip time.
|
||||
std::atomic<int64_t> nPingUsecTime;
|
||||
std::atomic<int64_t> nPingUsecTime{0};
|
||||
// Best measured round-trip time.
|
||||
std::atomic<int64_t> nMinPingUsecTime;
|
||||
std::atomic<int64_t> nMinPingUsecTime{std::numeric_limits<int64_t>::max()};
|
||||
// Whether a ping is requested.
|
||||
std::atomic<bool> fPingQueued;
|
||||
std::atomic<bool> fPingQueued{false};
|
||||
// Minimum fee rate with which to filter inv's to this node
|
||||
CAmount minFeeFilter GUARDED_BY(cs_feeFilter);
|
||||
CAmount minFeeFilter GUARDED_BY(cs_feeFilter){0};
|
||||
CCriticalSection cs_feeFilter;
|
||||
CAmount lastSentFeeFilter;
|
||||
int64_t nextSendTimeFeeFilter;
|
||||
CAmount lastSentFeeFilter{0};
|
||||
int64_t nextSendTimeFeeFilter{0};
|
||||
|
||||
CNode(NodeId id, ServiceFlags nLocalServicesIn, int nMyStartingHeightIn, SOCKET hSocketIn, const CAddress &addrIn, uint64_t nKeyedNetGroupIn, uint64_t nLocalHostNonceIn, const CAddress &addrBindIn, const std::string &addrNameIn = "", bool fInboundIn = false);
|
||||
~CNode();
|
||||
|
@ -774,7 +774,7 @@ private:
|
|||
// Services offered to this peer
|
||||
const ServiceFlags nLocalServices;
|
||||
const int nMyStartingHeight;
|
||||
int nSendVersion;
|
||||
int nSendVersion{0};
|
||||
std::list<CNetMessage> vRecvMsg; // Used only by SocketHandler thread
|
||||
|
||||
mutable CCriticalSection cs_addrName;
|
||||
|
|
Loading…
Reference in a new issue