@@ -1153,85 +1153,87 @@ void CConnman::AcceptConnection(const ListenSocket& hListenSocket) {
1153
1153
}
1154
1154
}
1155
1155
1156
- void CConnman::NotifyNumConnectionsChanged ()
1156
+ void CConnman::DisconnectNodes ()
1157
1157
{
1158
- size_t vNodesSize;
1159
1158
{
1160
1159
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);
1179
1160
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 ;
1187
1167
}
1188
1168
}
1169
+ }
1189
1170
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 )
1193
1176
{
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 ());
1198
1179
1199
- // release outbound grant (if any)
1200
- pnode->grantOutbound .Release ();
1180
+ // release outbound grant (if any)
1181
+ pnode->grantOutbound .Release ();
1201
1182
1202
- // close socket and cleanup
1203
- pnode->CloseSocketDisconnect ();
1183
+ // close socket and cleanup
1184
+ pnode->CloseSocketDisconnect ();
1204
1185
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);
1209
1189
}
1210
1190
}
1191
+ }
1192
+ {
1193
+ // Delete disconnected nodes
1194
+ std::list<CNode*> vNodesDisconnectedCopy = vNodesDisconnected;
1195
+ for (CNode* pnode : vNodesDisconnectedCopy)
1211
1196
{
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 ;
1226
1206
}
1227
1207
}
1228
- if ( fDelete ) {
1229
- vNodesDisconnected. remove (pnode);
1230
- DeleteNode (pnode);
1231
- }
1208
+ }
1209
+ if ( fDelete ) {
1210
+ vNodesDisconnected. remove (pnode);
1211
+ DeleteNode (pnode);
1232
1212
}
1233
1213
}
1234
1214
}
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 ();
1235
1237
NotifyNumConnectionsChanged ();
1236
1238
1237
1239
//
0 commit comments