@@ -313,12 +313,6 @@ bool IsReachable(const CNetAddr& addr)
313313 return IsReachable (net);
314314}
315315
316- void AddressCurrentlyConnected (const CService& addr)
317- {
318- addrman.Connected (addr);
319- }
320-
321-
322316uint64_t CNode::nTotalBytesRecv = 0 ;
323317uint64_t CNode::nTotalBytesSent = 0 ;
324318CCriticalSection CNode::cs_totalBytesRecv;
@@ -431,6 +425,7 @@ CNode* CConnman::ConnectNode(CAddress addrConnect, const char *pszDest, bool fCo
431425
432426 // Add node
433427 CNode* pnode = new CNode (hSocket, addrConnect, pszDest ? pszDest : " " , false );
428+ GetNodeSignals ().InitializeNode (pnode->GetId (), pnode);
434429 pnode->AddRef ();
435430
436431 {
@@ -1070,6 +1065,7 @@ void CConnman::AcceptConnection(const ListenSocket& hListenSocket) {
10701065 }
10711066
10721067 CNode* pnode = new CNode (hSocket, addr, " " , true );
1068+ GetNodeSignals ().InitializeNode (pnode->GetId (), pnode);
10731069 pnode->AddRef ();
10741070 pnode->fWhitelisted = whitelisted;
10751071
@@ -1139,7 +1135,7 @@ void CConnman::ThreadSocketHandler()
11391135 if (fDelete )
11401136 {
11411137 vNodesDisconnected.remove (pnode);
1142- delete pnode;
1138+ DeleteNode ( pnode) ;
11431139 }
11441140 }
11451141 }
@@ -2119,6 +2115,7 @@ bool CConnman::Start(boost::thread_group& threadGroup, std::string& strNodeError
21192115 CNetAddr local;
21202116 LookupHost (" 127.0.0.1" , local, false );
21212117 pnodeLocalHost = new CNode (INVALID_SOCKET, CAddress (CService (local, 0 ), nLocalServices));
2118+ GetNodeSignals ().InitializeNode (pnodeLocalHost->GetId (), pnodeLocalHost);
21222119 }
21232120
21242121 //
@@ -2194,19 +2191,32 @@ void CConnman::Stop()
21942191 LogPrintf (" CloseSocket(hListenSocket) failed with error %s\n " , NetworkErrorString (WSAGetLastError ()));
21952192
21962193 // clean up some globals (to help leak detection)
2197- BOOST_FOREACH (CNode *pnode, vNodes)
2198- delete pnode;
2199- BOOST_FOREACH (CNode *pnode, vNodesDisconnected)
2200- delete pnode;
2194+ BOOST_FOREACH (CNode *pnode, vNodes) {
2195+ DeleteNode (pnode);
2196+ }
2197+ BOOST_FOREACH (CNode *pnode, vNodesDisconnected) {
2198+ DeleteNode (pnode);
2199+ }
22012200 vNodes.clear ();
22022201 vNodesDisconnected.clear ();
22032202 vhListenSocket.clear ();
22042203 delete semOutbound;
22052204 semOutbound = NULL ;
2206- delete pnodeLocalHost;
2205+ if (pnodeLocalHost)
2206+ DeleteNode (pnodeLocalHost);
22072207 pnodeLocalHost = NULL ;
22082208}
22092209
2210+ void CConnman::DeleteNode (CNode* pnode)
2211+ {
2212+ assert (pnode);
2213+ bool fUpdateConnectionTime = false ;
2214+ GetNodeSignals ().FinalizeNode (pnode->GetId (), fUpdateConnectionTime );
2215+ if (fUpdateConnectionTime )
2216+ addrman.Connected (pnode->addr );
2217+ delete pnode;
2218+ }
2219+
22102220CConnman::~CConnman ()
22112221{
22122222}
@@ -2442,8 +2452,6 @@ CNode::CNode(SOCKET hSocketIn, const CAddress& addrIn, const std::string& addrNa
24422452 // Be shy and don't send version until we hear
24432453 if (hSocket != INVALID_SOCKET && !fInbound )
24442454 PushVersion ();
2445-
2446- GetNodeSignals ().InitializeNode (GetId (), this );
24472455}
24482456
24492457CNode::~CNode ()
@@ -2452,8 +2460,6 @@ CNode::~CNode()
24522460
24532461 if (pfilter)
24542462 delete pfilter;
2455-
2456- GetNodeSignals ().FinalizeNode (GetId ());
24572463}
24582464
24592465void CNode::AskFor (const CInv& inv)
0 commit comments