Skip to content

Commit

Permalink
Merge pull request #3180 from pstratem/processgetdata
Browse files Browse the repository at this point in the history
Reduce latency in network processing
  • Loading branch information
gavinandresen committed Nov 4, 2013
2 parents a95a1c0 + 75ef87d commit 97f844d
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 3 deletions.
10 changes: 9 additions & 1 deletion src/main.cpp
Expand Up @@ -3155,6 +3155,9 @@ void static ProcessGetData(CNode* pfrom)

// Track requests for our stuff.
g_signals.Inventory(inv.hash);

if (inv.type == MSG_BLOCK || inv.type == MSG_FILTERED_BLOCK)
break;
}
}

Expand Down Expand Up @@ -3841,7 +3844,10 @@ 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
Expand Down Expand Up @@ -3929,6 +3935,8 @@ bool ProcessMessages(CNode* pfrom)

if (!fRet)
LogPrintf("ProcessMessage(%s, %u bytes) FAILED\n", strCommand.c_str(), nMessageSize);

break;
}

// In case the connection got shut down, its receive buffer was wiped
Expand Down
18 changes: 16 additions & 2 deletions src/net.cpp
Expand Up @@ -1540,6 +1540,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)
Expand All @@ -1549,8 +1552,18 @@ void ThreadMessageHandler()
{
TRY_LOCK(pnode->cs_vRecvMsg, lockRecv);
if (lockRecv)
{
if (!g_signals.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();

Expand All @@ -1568,8 +1581,9 @@ void ThreadMessageHandler()
BOOST_FOREACH(CNode* pnode, vNodesCopy)
pnode->Release();
}

MilliSleep(100);

if (fSleep)
MilliSleep(100);
}
}

Expand Down

0 comments on commit 97f844d

Please sign in to comment.