mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-11-11 22:50:59 +01:00
net: handle nodesignals in CConnman
This commit is contained in:
38
src/net.cpp
38
src/net.cpp
@@ -313,12 +313,6 @@ bool IsReachable(const CNetAddr& addr)
|
||||
return IsReachable(net);
|
||||
}
|
||||
|
||||
void AddressCurrentlyConnected(const CService& addr)
|
||||
{
|
||||
addrman.Connected(addr);
|
||||
}
|
||||
|
||||
|
||||
uint64_t CNode::nTotalBytesRecv = 0;
|
||||
uint64_t CNode::nTotalBytesSent = 0;
|
||||
CCriticalSection CNode::cs_totalBytesRecv;
|
||||
@@ -431,6 +425,7 @@ CNode* CConnman::ConnectNode(CAddress addrConnect, const char *pszDest, bool fCo
|
||||
|
||||
// Add node
|
||||
CNode* pnode = new CNode(hSocket, addrConnect, pszDest ? pszDest : "", false);
|
||||
GetNodeSignals().InitializeNode(pnode->GetId(), pnode);
|
||||
pnode->AddRef();
|
||||
|
||||
{
|
||||
@@ -1070,6 +1065,7 @@ void CConnman::AcceptConnection(const ListenSocket& hListenSocket) {
|
||||
}
|
||||
|
||||
CNode* pnode = new CNode(hSocket, addr, "", true);
|
||||
GetNodeSignals().InitializeNode(pnode->GetId(), pnode);
|
||||
pnode->AddRef();
|
||||
pnode->fWhitelisted = whitelisted;
|
||||
|
||||
@@ -1139,7 +1135,7 @@ void CConnman::ThreadSocketHandler()
|
||||
if (fDelete)
|
||||
{
|
||||
vNodesDisconnected.remove(pnode);
|
||||
delete pnode;
|
||||
DeleteNode(pnode);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2119,6 +2115,7 @@ bool CConnman::Start(boost::thread_group& threadGroup, std::string& strNodeError
|
||||
CNetAddr local;
|
||||
LookupHost("127.0.0.1", local, false);
|
||||
pnodeLocalHost = new CNode(INVALID_SOCKET, CAddress(CService(local, 0), nLocalServices));
|
||||
GetNodeSignals().InitializeNode(pnodeLocalHost->GetId(), pnodeLocalHost);
|
||||
}
|
||||
|
||||
//
|
||||
@@ -2194,19 +2191,32 @@ void CConnman::Stop()
|
||||
LogPrintf("CloseSocket(hListenSocket) failed with error %s\n", NetworkErrorString(WSAGetLastError()));
|
||||
|
||||
// clean up some globals (to help leak detection)
|
||||
BOOST_FOREACH(CNode *pnode, vNodes)
|
||||
delete pnode;
|
||||
BOOST_FOREACH(CNode *pnode, vNodesDisconnected)
|
||||
delete pnode;
|
||||
BOOST_FOREACH(CNode *pnode, vNodes) {
|
||||
DeleteNode(pnode);
|
||||
}
|
||||
BOOST_FOREACH(CNode *pnode, vNodesDisconnected) {
|
||||
DeleteNode(pnode);
|
||||
}
|
||||
vNodes.clear();
|
||||
vNodesDisconnected.clear();
|
||||
vhListenSocket.clear();
|
||||
delete semOutbound;
|
||||
semOutbound = NULL;
|
||||
delete pnodeLocalHost;
|
||||
if(pnodeLocalHost)
|
||||
DeleteNode(pnodeLocalHost);
|
||||
pnodeLocalHost = NULL;
|
||||
}
|
||||
|
||||
void CConnman::DeleteNode(CNode* pnode)
|
||||
{
|
||||
assert(pnode);
|
||||
bool fUpdateConnectionTime = false;
|
||||
GetNodeSignals().FinalizeNode(pnode->GetId(), fUpdateConnectionTime);
|
||||
if(fUpdateConnectionTime)
|
||||
addrman.Connected(pnode->addr);
|
||||
delete pnode;
|
||||
}
|
||||
|
||||
CConnman::~CConnman()
|
||||
{
|
||||
}
|
||||
@@ -2442,8 +2452,6 @@ CNode::CNode(SOCKET hSocketIn, const CAddress& addrIn, const std::string& addrNa
|
||||
// Be shy and don't send version until we hear
|
||||
if (hSocket != INVALID_SOCKET && !fInbound)
|
||||
PushVersion();
|
||||
|
||||
GetNodeSignals().InitializeNode(GetId(), this);
|
||||
}
|
||||
|
||||
CNode::~CNode()
|
||||
@@ -2452,8 +2460,6 @@ CNode::~CNode()
|
||||
|
||||
if (pfilter)
|
||||
delete pfilter;
|
||||
|
||||
GetNodeSignals().FinalizeNode(GetId());
|
||||
}
|
||||
|
||||
void CNode::AskFor(const CInv& inv)
|
||||
|
||||
Reference in New Issue
Block a user