Skip to content

Commit d22a234

Browse files
committed
net: Use actual memory size in receive buffer accounting
Add a method CNetMessage::GetMemoryUsage and use this for accounting of the size of the process receive queue instead of the raw message size. This ensures that allocation and deserialization overhead is taken into account.
1 parent 047b5e2 commit d22a234

File tree

2 files changed

+10
-2
lines changed

2 files changed

+10
-2
lines changed

src/net.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,11 @@ size_t CSerializedNetMsg::GetMemoryUsage() const noexcept
124124
return sizeof(*this) + memusage::DynamicUsage(m_type) + memusage::DynamicUsage(data);
125125
}
126126

127+
size_t CNetMessage::GetMemoryUsage() const noexcept
128+
{
129+
return sizeof(*this) + memusage::DynamicUsage(m_type) + m_recv.GetMemoryUsage();
130+
}
131+
127132
void CConnman::AddAddrFetch(const std::string& strDest)
128133
{
129134
LOCK(m_addr_fetches_mutex);
@@ -3769,7 +3774,7 @@ void CNode::MarkReceivedMsgsForProcessing()
37693774
for (const auto& msg : vRecvMsg) {
37703775
// vRecvMsg contains only completed CNetMessage
37713776
// the single possible partially deserialized message are held by TransportDeserializer
3772-
nSizeAdded += msg.m_raw_message_size;
3777+
nSizeAdded += msg.GetMemoryUsage();
37733778
}
37743779

37753780
LOCK(m_msg_process_queue_mutex);
@@ -3786,7 +3791,7 @@ std::optional<std::pair<CNetMessage, bool>> CNode::PollMessage()
37863791
std::list<CNetMessage> msgs;
37873792
// Just take one message
37883793
msgs.splice(msgs.begin(), m_msg_process_queue, m_msg_process_queue.begin());
3789-
m_msg_process_queue_size -= msgs.front().m_raw_message_size;
3794+
m_msg_process_queue_size -= msgs.front().GetMemoryUsage();
37903795
fPauseRecv = m_msg_process_queue_size > m_recv_flood_size;
37913796

37923797
return std::make_pair(std::move(msgs.front()), !m_msg_process_queue.empty());

src/net.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,9 @@ class CNetMessage
245245
CNetMessage(const CNetMessage&) = delete;
246246
CNetMessage& operator=(CNetMessage&&) = default;
247247
CNetMessage& operator=(const CNetMessage&) = delete;
248+
249+
/** Compute total memory usage of this object (own memory + any dynamic memory). */
250+
size_t GetMemoryUsage() const noexcept;
248251
};
249252

250253
/** The Transport converts one connection's sent messages to wire bytes, and received bytes back. */

0 commit comments

Comments
 (0)