mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-11-11 22:50:59 +01:00
[net] Deduplicate marking received message for processing
This commit is contained in:
30
src/net.cpp
30
src/net.cpp
@@ -1328,18 +1328,7 @@ void CConnman::SocketHandlerConnected(const std::vector<CNode*>& nodes,
|
||||
}
|
||||
RecordBytesRecv(nBytes);
|
||||
if (notify) {
|
||||
size_t nSizeAdded = 0;
|
||||
for (const auto& msg : pnode->vRecvMsg) {
|
||||
// vRecvMsg contains only completed CNetMessage
|
||||
// the single possible partially deserialized message are held by TransportDeserializer
|
||||
nSizeAdded += msg.m_raw_message_size;
|
||||
}
|
||||
{
|
||||
LOCK(pnode->cs_vProcessMsg);
|
||||
pnode->vProcessMsg.splice(pnode->vProcessMsg.end(), pnode->vRecvMsg);
|
||||
pnode->nProcessQueueSize += nSizeAdded;
|
||||
pnode->fPauseRecv = pnode->nProcessQueueSize > nReceiveFloodSize;
|
||||
}
|
||||
pnode->MarkReceivedMsgsForProcessing(nReceiveFloodSize);
|
||||
WakeMessageHandler();
|
||||
}
|
||||
}
|
||||
@@ -2806,6 +2795,23 @@ CNode::CNode(NodeId idIn,
|
||||
}
|
||||
}
|
||||
|
||||
void CNode::MarkReceivedMsgsForProcessing(unsigned int recv_flood_size)
|
||||
{
|
||||
AssertLockNotHeld(cs_vProcessMsg);
|
||||
|
||||
size_t nSizeAdded = 0;
|
||||
for (const auto& msg : vRecvMsg) {
|
||||
// vRecvMsg contains only completed CNetMessage
|
||||
// the single possible partially deserialized message are held by TransportDeserializer
|
||||
nSizeAdded += msg.m_raw_message_size;
|
||||
}
|
||||
|
||||
LOCK(cs_vProcessMsg);
|
||||
vProcessMsg.splice(vProcessMsg.end(), vRecvMsg);
|
||||
nProcessQueueSize += nSizeAdded;
|
||||
fPauseRecv = nProcessQueueSize > recv_flood_size;
|
||||
}
|
||||
|
||||
bool CConnman::NodeFullyConnected(const CNode* pnode)
|
||||
{
|
||||
return pnode && pnode->fSuccessfullyConnected && !pnode->fDisconnect;
|
||||
|
||||
Reference in New Issue
Block a user