RAII wrapper for CNode*
This commit is contained in:
parent
df23937422
commit
1317cd1928
1 changed files with 18 additions and 7 deletions
25
src/net.cpp
25
src/net.cpp
|
@ -775,12 +775,23 @@ void SocketSendData(CNode *pnode)
|
||||||
|
|
||||||
static list<CNode*> vNodesDisconnected;
|
static list<CNode*> vNodesDisconnected;
|
||||||
|
|
||||||
static bool ReverseCompareNodeMinPingTime(CNode *a, CNode *b)
|
class CNodeRef {
|
||||||
|
public:
|
||||||
|
CNodeRef(CNode *pnode) : _pnode(pnode) {_pnode->AddRef();}
|
||||||
|
~CNodeRef() {_pnode->Release();}
|
||||||
|
|
||||||
|
CNode& operator *() const {return *_pnode;};
|
||||||
|
CNode* operator ->() const {return _pnode;};
|
||||||
|
private:
|
||||||
|
CNode *_pnode;
|
||||||
|
};
|
||||||
|
|
||||||
|
static bool ReverseCompareNodeMinPingTime(const CNodeRef &a, const CNodeRef &b)
|
||||||
{
|
{
|
||||||
return a->nMinPingUsecTime > b->nMinPingUsecTime;
|
return a->nMinPingUsecTime > b->nMinPingUsecTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool ReverseCompareNodeTimeConnected(CNode *a, CNode *b)
|
static bool ReverseCompareNodeTimeConnected(const CNodeRef &a, const CNodeRef &b)
|
||||||
{
|
{
|
||||||
return a->nTimeConnected > b->nTimeConnected;
|
return a->nTimeConnected > b->nTimeConnected;
|
||||||
}
|
}
|
||||||
|
@ -795,7 +806,7 @@ public:
|
||||||
GetRandBytes(vchSecretKey.data(), vchSecretKey.size());
|
GetRandBytes(vchSecretKey.data(), vchSecretKey.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
bool operator()(CNode *a, CNode *b)
|
bool operator()(const CNodeRef &a, const CNodeRef &b)
|
||||||
{
|
{
|
||||||
std::vector<unsigned char> vchGroupA, vchGroupB;
|
std::vector<unsigned char> vchGroupA, vchGroupB;
|
||||||
CSHA256 hashA, hashB;
|
CSHA256 hashA, hashB;
|
||||||
|
@ -818,7 +829,7 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
static bool AttemptToEvictConnection(bool fPreferNewConnection) {
|
static bool AttemptToEvictConnection(bool fPreferNewConnection) {
|
||||||
std::vector<CNode*> vEvictionCandidates;
|
std::vector<CNodeRef> vEvictionCandidates;
|
||||||
{
|
{
|
||||||
LOCK(cs_vNodes);
|
LOCK(cs_vNodes);
|
||||||
|
|
||||||
|
@ -831,7 +842,7 @@ static bool AttemptToEvictConnection(bool fPreferNewConnection) {
|
||||||
continue;
|
continue;
|
||||||
if (node->addr.IsLocal())
|
if (node->addr.IsLocal())
|
||||||
continue;
|
continue;
|
||||||
vEvictionCandidates.push_back(node);
|
vEvictionCandidates.push_back(CNodeRef(node));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -859,8 +870,8 @@ static bool AttemptToEvictConnection(bool fPreferNewConnection) {
|
||||||
// Identify CNetAddr with the most connections
|
// Identify CNetAddr with the most connections
|
||||||
CNetAddr naMostConnections;
|
CNetAddr naMostConnections;
|
||||||
unsigned int nMostConnections = 0;
|
unsigned int nMostConnections = 0;
|
||||||
std::map<CNetAddr, std::vector<CNode*> > mapAddrCounts;
|
std::map<CNetAddr, std::vector<CNodeRef> > mapAddrCounts;
|
||||||
BOOST_FOREACH(CNode *node, vEvictionCandidates) {
|
BOOST_FOREACH(const CNodeRef &node, vEvictionCandidates) {
|
||||||
mapAddrCounts[node->addr].push_back(node);
|
mapAddrCounts[node->addr].push_back(node);
|
||||||
|
|
||||||
if (mapAddrCounts[node->addr].size() > nMostConnections) {
|
if (mapAddrCounts[node->addr].size() > nMostConnections) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue