Skip to content

Commit 7479b63

Browse files
committed
Move DisconnectNodes logic to private method.
1 parent edb5350 commit 7479b63

File tree

2 files changed

+63
-60
lines changed

2 files changed

+63
-60
lines changed

src/net.cpp

Lines changed: 62 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1153,85 +1153,87 @@ void CConnman::AcceptConnection(const ListenSocket& hListenSocket) {
11531153
}
11541154
}
11551155

1156-
void CConnman::NotifyNumConnectionsChanged()
1156+
void CConnman::DisconnectNodes()
11571157
{
1158-
size_t vNodesSize;
11591158
{
11601159
LOCK(cs_vNodes);
1161-
vNodesSize = vNodes.size();
1162-
}
1163-
if(vNodesSize != nPrevNodeCount) {
1164-
nPrevNodeCount = vNodesSize;
1165-
if(clientInterface)
1166-
clientInterface->NotifyNumConnectionsChanged(vNodesSize);
1167-
}
1168-
}
1169-
1170-
void CConnman::ThreadSocketHandler()
1171-
{
1172-
while (!interruptNet)
1173-
{
1174-
//
1175-
// Disconnect nodes
1176-
//
1177-
{
1178-
LOCK(cs_vNodes);
11791160

1180-
if (!fNetworkActive) {
1181-
// Disconnect any connected nodes
1182-
for (CNode* pnode : vNodes) {
1183-
if (!pnode->fDisconnect) {
1184-
LogPrint(BCLog::NET, "Network not active, dropping peer=%d\n", pnode->GetId());
1185-
pnode->fDisconnect = true;
1186-
}
1161+
if (!fNetworkActive) {
1162+
// Disconnect any connected nodes
1163+
for (CNode* pnode : vNodes) {
1164+
if (!pnode->fDisconnect) {
1165+
LogPrint(BCLog::NET, "Network not active, dropping peer=%d\n", pnode->GetId());
1166+
pnode->fDisconnect = true;
11871167
}
11881168
}
1169+
}
11891170

1190-
// Disconnect unused nodes
1191-
std::vector<CNode*> vNodesCopy = vNodes;
1192-
for (CNode* pnode : vNodesCopy)
1171+
// Disconnect unused nodes
1172+
std::vector<CNode*> vNodesCopy = vNodes;
1173+
for (CNode* pnode : vNodesCopy)
1174+
{
1175+
if (pnode->fDisconnect)
11931176
{
1194-
if (pnode->fDisconnect)
1195-
{
1196-
// remove from vNodes
1197-
vNodes.erase(remove(vNodes.begin(), vNodes.end(), pnode), vNodes.end());
1177+
// remove from vNodes
1178+
vNodes.erase(remove(vNodes.begin(), vNodes.end(), pnode), vNodes.end());
11981179

1199-
// release outbound grant (if any)
1200-
pnode->grantOutbound.Release();
1180+
// release outbound grant (if any)
1181+
pnode->grantOutbound.Release();
12011182

1202-
// close socket and cleanup
1203-
pnode->CloseSocketDisconnect();
1183+
// close socket and cleanup
1184+
pnode->CloseSocketDisconnect();
12041185

1205-
// hold in disconnected pool until all refs are released
1206-
pnode->Release();
1207-
vNodesDisconnected.push_back(pnode);
1208-
}
1186+
// hold in disconnected pool until all refs are released
1187+
pnode->Release();
1188+
vNodesDisconnected.push_back(pnode);
12091189
}
12101190
}
1191+
}
1192+
{
1193+
// Delete disconnected nodes
1194+
std::list<CNode*> vNodesDisconnectedCopy = vNodesDisconnected;
1195+
for (CNode* pnode : vNodesDisconnectedCopy)
12111196
{
1212-
// Delete disconnected nodes
1213-
std::list<CNode*> vNodesDisconnectedCopy = vNodesDisconnected;
1214-
for (CNode* pnode : vNodesDisconnectedCopy)
1215-
{
1216-
// wait until threads are done using it
1217-
if (pnode->GetRefCount() <= 0) {
1218-
bool fDelete = false;
1219-
{
1220-
TRY_LOCK(pnode->cs_inventory, lockInv);
1221-
if (lockInv) {
1222-
TRY_LOCK(pnode->cs_vSend, lockSend);
1223-
if (lockSend) {
1224-
fDelete = true;
1225-
}
1197+
// wait until threads are done using it
1198+
if (pnode->GetRefCount() <= 0) {
1199+
bool fDelete = false;
1200+
{
1201+
TRY_LOCK(pnode->cs_inventory, lockInv);
1202+
if (lockInv) {
1203+
TRY_LOCK(pnode->cs_vSend, lockSend);
1204+
if (lockSend) {
1205+
fDelete = true;
12261206
}
12271207
}
1228-
if (fDelete) {
1229-
vNodesDisconnected.remove(pnode);
1230-
DeleteNode(pnode);
1231-
}
1208+
}
1209+
if (fDelete) {
1210+
vNodesDisconnected.remove(pnode);
1211+
DeleteNode(pnode);
12321212
}
12331213
}
12341214
}
1215+
}
1216+
}
1217+
1218+
void CConnman::NotifyNumConnectionsChanged()
1219+
{
1220+
size_t vNodesSize;
1221+
{
1222+
LOCK(cs_vNodes);
1223+
vNodesSize = vNodes.size();
1224+
}
1225+
if(vNodesSize != nPrevNodeCount) {
1226+
nPrevNodeCount = vNodesSize;
1227+
if(clientInterface)
1228+
clientInterface->NotifyNumConnectionsChanged(vNodesSize);
1229+
}
1230+
}
1231+
1232+
void CConnman::ThreadSocketHandler()
1233+
{
1234+
while (!interruptNet)
1235+
{
1236+
DisconnectNodes();
12351237
NotifyNumConnectionsChanged();
12361238

12371239
//

src/net.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -336,6 +336,7 @@ class CConnman
336336
void ThreadOpenConnections(std::vector<std::string> connect);
337337
void ThreadMessageHandler();
338338
void AcceptConnection(const ListenSocket& hListenSocket);
339+
void DisconnectNodes();
339340
void NotifyNumConnectionsChanged();
340341
void ThreadSocketHandler();
341342
void ThreadDNSAddressSeed();

0 commit comments

Comments
 (0)