|
|
@ -1066,21 +1066,18 @@ void CConnman::ThreadSocketHandler() |
|
|
|
BOOST_FOREACH(CNode* pnode, vNodesDisconnectedCopy) |
|
|
|
BOOST_FOREACH(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); |
|
|
|
TRY_LOCK(pnode->cs_inventory, lockInv); |
|
|
|
if (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); |
|
|
|
} |
|
|
|
} |
|
|
|