@@ -307,9 +307,11 @@ CNode* CConnman::FindNode(const CSubNet& subNet)
307
307
CNode* CConnman::FindNode (const std::string& addrName)
308
308
{
309
309
LOCK (cs_vNodes);
310
- BOOST_FOREACH (CNode* pnode, vNodes)
311
- if (pnode->addrName == addrName)
310
+ BOOST_FOREACH (CNode* pnode, vNodes) {
311
+ if (pnode->GetAddrName () == addrName) {
312
312
return (pnode);
313
+ }
314
+ }
313
315
return NULL ;
314
316
}
315
317
@@ -373,9 +375,7 @@ CNode* CConnman::ConnectNode(CAddress addrConnect, const char *pszDest, bool fCo
373
375
CNode* pnode = FindNode ((CService)addrConnect);
374
376
if (pnode)
375
377
{
376
- if (pnode->addrName .empty ()) {
377
- pnode->addrName = std::string (pszDest);
378
- }
378
+ pnode->MaybeSetAddrName (std::string (pszDest));
379
379
CloseSocket (hSocket);
380
380
LogPrintf (" Failed to open new connection, already connected\n " );
381
381
return NULL ;
@@ -593,6 +593,19 @@ void CConnman::AddWhitelistedRange(const CSubNet &subnet) {
593
593
vWhitelistedRange.push_back (subnet);
594
594
}
595
595
596
+
597
+ std::string CNode::GetAddrName () const {
598
+ LOCK (cs_addrName);
599
+ return addrName;
600
+ }
601
+
602
+ void CNode::MaybeSetAddrName (const std::string& addrNameIn) {
603
+ LOCK (cs_addrName);
604
+ if (addrName.empty ()) {
605
+ addrName = addrNameIn;
606
+ }
607
+ }
608
+
596
609
#undef X
597
610
#define X (name ) stats.name = name
598
611
void CNode::copyStats (CNodeStats &stats)
@@ -608,7 +621,7 @@ void CNode::copyStats(CNodeStats &stats)
608
621
X (nLastRecv);
609
622
X (nTimeConnected);
610
623
X (nTimeOffset);
611
- X ( addrName);
624
+ stats. addrName = GetAddrName ( );
612
625
X (nVersion);
613
626
{
614
627
LOCK (cs_SubVer);
@@ -1798,8 +1811,9 @@ std::vector<AddedNodeInfo> CConnman::GetAddedNodeInfo()
1798
1811
if (pnode->addr .IsValid ()) {
1799
1812
mapConnected[pnode->addr ] = pnode->fInbound ;
1800
1813
}
1801
- if (!pnode->addrName .empty ()) {
1802
- mapConnectedByName[pnode->addrName ] = std::make_pair (pnode->fInbound , static_cast <const CService&>(pnode->addr ));
1814
+ std::string addrName = pnode->GetAddrName ();
1815
+ if (!addrName.empty ()) {
1816
+ mapConnectedByName[std::move (addrName)] = std::make_pair (pnode->fInbound , static_cast <const CService&>(pnode->addr ));
1803
1817
}
1804
1818
}
1805
1819
}
0 commit comments