@@ -350,12 +350,6 @@ bool IsReachable(const CNetAddr& addr)
350350 return IsReachable (net);
351351}
352352
353- void AddressCurrentlyConnected (const CService& addr)
354- {
355- addrman.Connected (addr);
356- }
357-
358-
359353uint64_t CNode::nTotalBytesRecv = 0 ;
360354uint64_t CNode::nTotalBytesSent = 0 ;
361355RecursiveMutex CNode::cs_totalBytesRecv;
@@ -441,6 +435,7 @@ CNode* CConnman::ConnectNode(CAddress addrConnect, const char* pszDest, bool fCo
441435
442436 // Add node
443437 CNode* pnode = new CNode (hSocket, addrConnect, pszDest ? pszDest : " " , false );
438+ GetNodeSignals ().InitializeNode (pnode->GetId (), pnode);
444439 pnode->AddRef ();
445440
446441 {
@@ -1067,6 +1062,7 @@ void CConnman::AcceptConnection(const ListenSocket& hListenSocket) {
10671062 }
10681063
10691064 CNode* pnode = new CNode (hSocket, addr, " " , true );
1065+ GetNodeSignals ().InitializeNode (pnode->GetId (), pnode);
10701066 pnode->AddRef ();
10711067 pnode->fWhitelisted = whitelisted;
10721068
@@ -1128,7 +1124,7 @@ void CConnman::ThreadSocketHandler()
11281124 }
11291125 if (fDelete ) {
11301126 vNodesDisconnected.remove (pnode);
1131- delete pnode;
1127+ DeleteNode ( pnode) ;
11321128 }
11331129 }
11341130 }
@@ -2021,6 +2017,7 @@ bool CConnman::Start(boost::thread_group& threadGroup, std::string& strNodeError
20212017 CNetAddr local;
20222018 LookupHost (" 127.0.0.1" , local, false );
20232019 pnodeLocalHost = new CNode (INVALID_SOCKET, CAddress (CService (local, 0 ), nLocalServices));
2020+ GetNodeSignals ().InitializeNode (pnodeLocalHost->GetId (), pnodeLocalHost);
20242021 }
20252022
20262023 //
@@ -2104,19 +2101,32 @@ void CConnman::Stop()
21042101 LogPrintf (" CloseSocket(hListenSocket) failed with error %s\n " , NetworkErrorString (WSAGetLastError ()));
21052102
21062103 // clean up some globals (to help leak detection)
2107- for (CNode* pnode : vNodes)
2108- delete pnode;
2109- for (CNode* pnode : vNodesDisconnected)
2110- delete pnode;
2104+ for (CNode* pnode : vNodes) {
2105+ DeleteNode (pnode);
2106+ }
2107+ for (CNode* pnode : vNodesDisconnected) {
2108+ DeleteNode (pnode);
2109+ }
21112110 vNodes.clear ();
21122111 vNodesDisconnected.clear ();
21132112 vhListenSocket.clear ();
21142113 delete semOutbound;
21152114 semOutbound = NULL ;
2116- delete pnodeLocalHost;
2115+ if (pnodeLocalHost)
2116+ DeleteNode (pnodeLocalHost);
21172117 pnodeLocalHost = NULL ;
21182118}
21192119
2120+ void CConnman::DeleteNode (CNode* pnode)
2121+ {
2122+ assert (pnode);
2123+ bool fUpdateConnectionTime = false ;
2124+ GetNodeSignals ().FinalizeNode (pnode->GetId (), fUpdateConnectionTime );
2125+ if (fUpdateConnectionTime )
2126+ addrman.Connected (pnode->addr );
2127+ delete pnode;
2128+ }
2129+
21202130CConnman::~CConnman ()
21212131{
21222132}
@@ -2301,8 +2311,6 @@ CNode::CNode(SOCKET hSocketIn, CAddress addrIn, std::string addrNameIn, bool fIn
23012311 // Be shy and don't send version until we hear
23022312 if (hSocket != INVALID_SOCKET && !fInbound )
23032313 PushVersion ();
2304-
2305- GetNodeSignals ().InitializeNode (GetId (), this );
23062314}
23072315
23082316CNode::~CNode ()
@@ -2311,8 +2319,6 @@ CNode::~CNode()
23112319
23122320 if (pfilter)
23132321 delete pfilter;
2314-
2315- GetNodeSignals ().FinalizeNode (GetId ());
23162322}
23172323
23182324void CNode::AskFor (const CInv& inv)
0 commit comments