diff options
| author | Gavin Andresen <[email protected]> | 2013-11-03 21:52:25 -0800 |
|---|---|---|
| committer | Gavin Andresen <[email protected]> | 2013-11-03 21:52:25 -0800 |
| commit | 97f844dd95c54b0fe2f2a1bb006c74ff544ff125 (patch) | |
| tree | 6d08ffa5ec8ae6e5efd6953c6eed3d154d26155c /src/net.cpp | |
| parent | Merge pull request #3154 from gavinandresen/mempool_refactor (diff) | |
| parent | process received messages one at a time without sleeping between messages (diff) | |
| download | discoin-97f844dd95c54b0fe2f2a1bb006c74ff544ff125.tar.xz discoin-97f844dd95c54b0fe2f2a1bb006c74ff544ff125.zip | |
Merge pull request #3180 from pstratem/processgetdata
Reduce latency in network processing
Diffstat (limited to 'src/net.cpp')
| -rw-r--r-- | src/net.cpp | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/src/net.cpp b/src/net.cpp index de8543da5..8c0ada8f9 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -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) @@ -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(); @@ -1568,8 +1581,9 @@ void ThreadMessageHandler() BOOST_FOREACH(CNode* pnode, vNodesCopy) pnode->Release(); } - - MilliSleep(100); + + if (fSleep) + MilliSleep(100); } } |