mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-11-11 22:50:59 +01:00
p2p: add assertions and negative TS annotations for m_total_bytes_sent_mutex
Co-authored-by: Hennadii Stepanov <32963518+hebasto@users.noreply.github.com>
This commit is contained in:
24
src/net.cpp
24
src/net.cpp
@@ -1563,6 +1563,8 @@ void CConnman::SocketEvents(const std::vector<CNode*>& nodes,
|
||||
|
||||
void CConnman::SocketHandler()
|
||||
{
|
||||
AssertLockNotHeld(m_total_bytes_sent_mutex);
|
||||
|
||||
std::set<SOCKET> recv_set;
|
||||
std::set<SOCKET> send_set;
|
||||
std::set<SOCKET> error_set;
|
||||
@@ -1589,6 +1591,8 @@ void CConnman::SocketHandlerConnected(const std::vector<CNode*>& nodes,
|
||||
const std::set<SOCKET>& send_set,
|
||||
const std::set<SOCKET>& error_set)
|
||||
{
|
||||
AssertLockNotHeld(m_total_bytes_sent_mutex);
|
||||
|
||||
for (CNode* pnode : nodes) {
|
||||
if (interruptNet)
|
||||
return;
|
||||
@@ -1690,6 +1694,8 @@ void CConnman::SocketHandlerListening(const std::set<SOCKET>& recv_set)
|
||||
|
||||
void CConnman::ThreadSocketHandler()
|
||||
{
|
||||
AssertLockNotHeld(m_total_bytes_sent_mutex);
|
||||
|
||||
SetSyscallSandboxPolicy(SyscallSandboxPolicy::NET);
|
||||
while (!interruptNet)
|
||||
{
|
||||
@@ -2561,6 +2567,7 @@ bool CConnman::InitBinds(const Options& options)
|
||||
|
||||
bool CConnman::Start(CScheduler& scheduler, const Options& connOptions)
|
||||
{
|
||||
AssertLockNotHeld(m_total_bytes_sent_mutex);
|
||||
Init(connOptions);
|
||||
|
||||
if (fListen && !InitBinds(connOptions)) {
|
||||
@@ -2913,7 +2920,9 @@ void CConnman::RecordBytesRecv(uint64_t bytes)
|
||||
|
||||
void CConnman::RecordBytesSent(uint64_t bytes)
|
||||
{
|
||||
AssertLockNotHeld(m_total_bytes_sent_mutex);
|
||||
LOCK(m_total_bytes_sent_mutex);
|
||||
|
||||
nTotalBytesSent += bytes;
|
||||
|
||||
const auto now = GetTime<std::chrono::seconds>();
|
||||
@@ -2929,6 +2938,7 @@ void CConnman::RecordBytesSent(uint64_t bytes)
|
||||
|
||||
uint64_t CConnman::GetMaxOutboundTarget() const
|
||||
{
|
||||
AssertLockNotHeld(m_total_bytes_sent_mutex);
|
||||
LOCK(m_total_bytes_sent_mutex);
|
||||
return nMaxOutboundLimit;
|
||||
}
|
||||
@@ -2940,7 +2950,15 @@ std::chrono::seconds CConnman::GetMaxOutboundTimeframe() const
|
||||
|
||||
std::chrono::seconds CConnman::GetMaxOutboundTimeLeftInCycle() const
|
||||
{
|
||||
AssertLockNotHeld(m_total_bytes_sent_mutex);
|
||||
LOCK(m_total_bytes_sent_mutex);
|
||||
return GetMaxOutboundTimeLeftInCycle_();
|
||||
}
|
||||
|
||||
std::chrono::seconds CConnman::GetMaxOutboundTimeLeftInCycle_() const
|
||||
{
|
||||
AssertLockHeld(m_total_bytes_sent_mutex);
|
||||
|
||||
if (nMaxOutboundLimit == 0)
|
||||
return 0s;
|
||||
|
||||
@@ -2954,6 +2972,7 @@ std::chrono::seconds CConnman::GetMaxOutboundTimeLeftInCycle() const
|
||||
|
||||
bool CConnman::OutboundTargetReached(bool historicalBlockServingLimit) const
|
||||
{
|
||||
AssertLockNotHeld(m_total_bytes_sent_mutex);
|
||||
LOCK(m_total_bytes_sent_mutex);
|
||||
if (nMaxOutboundLimit == 0)
|
||||
return false;
|
||||
@@ -2961,7 +2980,7 @@ bool CConnman::OutboundTargetReached(bool historicalBlockServingLimit) const
|
||||
if (historicalBlockServingLimit)
|
||||
{
|
||||
// keep a large enough buffer to at least relay each block once
|
||||
const std::chrono::seconds timeLeftInCycle = GetMaxOutboundTimeLeftInCycle();
|
||||
const std::chrono::seconds timeLeftInCycle = GetMaxOutboundTimeLeftInCycle_();
|
||||
const uint64_t buffer = timeLeftInCycle / std::chrono::minutes{10} * MAX_BLOCK_SERIALIZED_SIZE;
|
||||
if (buffer >= nMaxOutboundLimit || nMaxOutboundTotalBytesSentInCycle >= nMaxOutboundLimit - buffer)
|
||||
return true;
|
||||
@@ -2974,6 +2993,7 @@ bool CConnman::OutboundTargetReached(bool historicalBlockServingLimit) const
|
||||
|
||||
uint64_t CConnman::GetOutboundTargetBytesLeft() const
|
||||
{
|
||||
AssertLockNotHeld(m_total_bytes_sent_mutex);
|
||||
LOCK(m_total_bytes_sent_mutex);
|
||||
if (nMaxOutboundLimit == 0)
|
||||
return 0;
|
||||
@@ -2988,6 +3008,7 @@ uint64_t CConnman::GetTotalBytesRecv() const
|
||||
|
||||
uint64_t CConnman::GetTotalBytesSent() const
|
||||
{
|
||||
AssertLockNotHeld(m_total_bytes_sent_mutex);
|
||||
LOCK(m_total_bytes_sent_mutex);
|
||||
return nTotalBytesSent;
|
||||
}
|
||||
@@ -3035,6 +3056,7 @@ bool CConnman::NodeFullyConnected(const CNode* pnode)
|
||||
|
||||
void CConnman::PushMessage(CNode* pnode, CSerializedNetMsg&& msg)
|
||||
{
|
||||
AssertLockNotHeld(m_total_bytes_sent_mutex);
|
||||
size_t nMessageSize = msg.data.size();
|
||||
LogPrint(BCLog::NET, "sending %s (%d bytes) peer=%d\n", msg.m_type, nMessageSize, pnode->GetId());
|
||||
if (gArgs.GetBoolArg("-capturemessages", false)) {
|
||||
|
||||
Reference in New Issue
Block a user