Changeset View
Changeset View
Standalone View
Standalone View
src/net.cpp
Show First 20 Lines • Show All 1,208 Lines • ▼ Show 20 Lines | void CConnman::DisconnectNodes() { | ||||
{ | { | ||||
// Delete disconnected nodes | // Delete disconnected nodes | ||||
std::list<CNode *> vNodesDisconnectedCopy = vNodesDisconnected; | std::list<CNode *> vNodesDisconnectedCopy = vNodesDisconnected; | ||||
for (CNode *pnode : vNodesDisconnectedCopy) { | for (CNode *pnode : vNodesDisconnectedCopy) { | ||||
// wait until threads are done using it | // wait until threads are done using it | ||||
if (pnode->GetRefCount() <= 0) { | if (pnode->GetRefCount() <= 0) { | ||||
bool fDelete = false; | bool fDelete = false; | ||||
{ | { | ||||
TRY_LOCK(pnode->cs_inventory, lockInv); | |||||
if (lockInv) { | |||||
TRY_LOCK(pnode->cs_vSend, lockSend); | TRY_LOCK(pnode->cs_vSend, lockSend); | ||||
if (lockSend) { | if (lockSend) { | ||||
fDelete = true; | fDelete = true; | ||||
} | } | ||||
} | } | ||||
} | |||||
if (fDelete) { | if (fDelete) { | ||||
vNodesDisconnected.remove(pnode); | vNodesDisconnected.remove(pnode); | ||||
DeleteNode(pnode); | DeleteNode(pnode); | ||||
} | } | ||||
} | } | ||||
} | } | ||||
} | } | ||||
} | } | ||||
▲ Show 20 Lines • Show All 1,933 Lines • Show Last 20 Lines |