mirror of
https://github.com/dashpay/dash.git
synced 2024-12-28 21:42:47 +01:00
process received messages one at a time without sleeping between messages
This commit is contained in:
parent
1d63195f3f
commit
9229434811
@ -3183,6 +3183,9 @@ void static ProcessGetData(CNode* pfrom)
|
||||
|
||||
// Track requests for our stuff.
|
||||
Inventory(inv.hash);
|
||||
|
||||
if (inv.type == MSG_BLOCK || inv.type == MSG_FILTERED_BLOCK)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -3804,6 +3807,9 @@ bool ProcessMessages(CNode* pfrom)
|
||||
if (!pfrom->vRecvGetData.empty())
|
||||
ProcessGetData(pfrom);
|
||||
|
||||
// this maintains the order of responses
|
||||
if (!pfrom->vRecvGetData.empty()) return fOk;
|
||||
|
||||
std::deque<CNetMessage>::iterator it = pfrom->vRecvMsg.begin();
|
||||
while (!pfrom->fDisconnect && it != pfrom->vRecvMsg.end()) {
|
||||
// Don't bother if send buffer is too full to respond anyway
|
||||
@ -3894,6 +3900,8 @@ bool ProcessMessages(CNode* pfrom)
|
||||
|
||||
if (!fRet)
|
||||
printf("ProcessMessage(%s, %u bytes) FAILED\n", strCommand.c_str(), nMessageSize);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
// In case the connection got shut down, its receive buffer was wiped
|
||||
|
16
src/net.cpp
16
src/net.cpp
@ -1624,6 +1624,9 @@ void ThreadMessageHandler()
|
||||
CNode* pnodeTrickle = NULL;
|
||||
if (!vNodesCopy.empty())
|
||||
pnodeTrickle = vNodesCopy[GetRand(vNodesCopy.size())];
|
||||
|
||||
bool fSleep = true;
|
||||
|
||||
BOOST_FOREACH(CNode* pnode, vNodesCopy)
|
||||
{
|
||||
if (pnode->fDisconnect)
|
||||
@ -1633,8 +1636,18 @@ void ThreadMessageHandler()
|
||||
{
|
||||
TRY_LOCK(pnode->cs_vRecvMsg, lockRecv);
|
||||
if (lockRecv)
|
||||
{
|
||||
if (!ProcessMessages(pnode))
|
||||
pnode->CloseSocketDisconnect();
|
||||
|
||||
if (pnode->nSendSize < SendBufferSize())
|
||||
{
|
||||
if (!pnode->vRecvGetData.empty() || (!pnode->vRecvMsg.empty() && pnode->vRecvMsg[0].complete()))
|
||||
{
|
||||
fSleep = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
boost::this_thread::interruption_point();
|
||||
|
||||
@ -1653,7 +1666,8 @@ void ThreadMessageHandler()
|
||||
pnode->Release();
|
||||
}
|
||||
|
||||
MilliSleep(100);
|
||||
if (fSleep)
|
||||
MilliSleep(100);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user