Skip to content

Commit cc5cdf8

Browse files
committed
[net] Deduplicate marking received message for processing
1 parent ad44aa5 commit cc5cdf8

File tree

3 files changed

+23
-24
lines changed

3 files changed

+23
-24
lines changed

src/net.cpp

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1328,18 +1328,7 @@ void CConnman::SocketHandlerConnected(const std::vector<CNode*>& nodes,
13281328
}
13291329
RecordBytesRecv(nBytes);
13301330
if (notify) {
1331-
size_t nSizeAdded = 0;
1332-
for (const auto& msg : pnode->vRecvMsg) {
1333-
// vRecvMsg contains only completed CNetMessage
1334-
// the single possible partially deserialized message are held by TransportDeserializer
1335-
nSizeAdded += msg.m_raw_message_size;
1336-
}
1337-
{
1338-
LOCK(pnode->cs_vProcessMsg);
1339-
pnode->vProcessMsg.splice(pnode->vProcessMsg.end(), pnode->vRecvMsg);
1340-
pnode->nProcessQueueSize += nSizeAdded;
1341-
pnode->fPauseRecv = pnode->nProcessQueueSize > nReceiveFloodSize;
1342-
}
1331+
pnode->MarkReceivedMsgsForProcessing(nReceiveFloodSize);
13431332
WakeMessageHandler();
13441333
}
13451334
}
@@ -2806,6 +2795,23 @@ CNode::CNode(NodeId idIn,
28062795
}
28072796
}
28082797

2798+
void CNode::MarkReceivedMsgsForProcessing(unsigned int recv_flood_size)
2799+
{
2800+
AssertLockNotHeld(cs_vProcessMsg);
2801+
2802+
size_t nSizeAdded = 0;
2803+
for (const auto& msg : vRecvMsg) {
2804+
// vRecvMsg contains only completed CNetMessage
2805+
// the single possible partially deserialized message are held by TransportDeserializer
2806+
nSizeAdded += msg.m_raw_message_size;
2807+
}
2808+
2809+
LOCK(cs_vProcessMsg);
2810+
vProcessMsg.splice(vProcessMsg.end(), vRecvMsg);
2811+
nProcessQueueSize += nSizeAdded;
2812+
fPauseRecv = nProcessQueueSize > recv_flood_size;
2813+
}
2814+
28092815
bool CConnman::NodeFullyConnected(const CNode* pnode)
28102816
{
28112817
return pnode && pnode->fSuccessfullyConnected && !pnode->fDisconnect;

src/net.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -422,6 +422,10 @@ class CNode
422422
return m_conn_type;
423423
}
424424

425+
/** Move all messages from the received queue to the processing queue. */
426+
void MarkReceivedMsgsForProcessing(unsigned int recv_flood_size)
427+
EXCLUSIVE_LOCKS_REQUIRED(!cs_vProcessMsg);
428+
425429
bool IsOutboundOrBlockRelayConn() const {
426430
switch (m_conn_type) {
427431
case ConnectionType::OUTBOUND_FULL_RELAY:

src/test/util/net.cpp

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -66,18 +66,7 @@ void ConnmanTestMsg::NodeReceiveMsgBytes(CNode& node, Span<const uint8_t> msg_by
6666
{
6767
assert(node.ReceiveMsgBytes(msg_bytes, complete));
6868
if (complete) {
69-
size_t nSizeAdded = 0;
70-
for (const auto& msg : node.vRecvMsg) {
71-
// vRecvMsg contains only completed CNetMessage
72-
// the single possible partially deserialized message are held by TransportDeserializer
73-
nSizeAdded += msg.m_raw_message_size;
74-
}
75-
{
76-
LOCK(node.cs_vProcessMsg);
77-
node.vProcessMsg.splice(node.vProcessMsg.end(), node.vRecvMsg);
78-
node.nProcessQueueSize += nSizeAdded;
79-
node.fPauseRecv = node.nProcessQueueSize > nReceiveFloodSize;
80-
}
69+
node.MarkReceivedMsgsForProcessing(nReceiveFloodSize);
8170
}
8271
}
8372

0 commit comments

Comments
 (0)