From 140e91fdcad1405284199e15ca0085093f7e15e3 Mon Sep 17 00:00:00 2001 From: Kittywhiskers Van Gogh <63189531+kwvg@users.noreply.github.com> Date: Tue, 19 Mar 2024 18:41:58 +0000 Subject: [PATCH] merge bitcoin#20864: Move SocketSendData lock annotation to header includes: - fa210689e27b0d78b2fe894e51e364179db7a3ce --- src/net.cpp | 50 +++++++++++++++++++++++++------------------------- src/net.h | 4 ++-- 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/src/net.cpp b/src/net.cpp index 37c5458c05..5beddbf35d 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -876,34 +876,34 @@ void V1TransportSerializer::prepareForTransport(CSerializedNetMsg& msg, std::vec CVectorWriter{SER_NETWORK, INIT_PROTO_VERSION, header, 0, hdr}; } -size_t CConnman::SocketSendData(CNode *pnode) EXCLUSIVE_LOCKS_REQUIRED(pnode->cs_vSend) +size_t CConnman::SocketSendData(CNode& node) { - auto it = pnode->vSendMsg.begin(); + auto it = node.vSendMsg.begin(); size_t nSentSize = 0; - while (it != pnode->vSendMsg.end()) { - const auto &data = *it; - assert(data.size() > pnode->nSendOffset); + while (it != node.vSendMsg.end()) { + const auto& data = *it; + assert(data.size() > node.nSendOffset); int nBytes = 0; { - LOCK(pnode->cs_hSocket); - if (pnode->hSocket == INVALID_SOCKET) + LOCK(node.cs_hSocket); + if (node.hSocket == INVALID_SOCKET) break; - nBytes = send(pnode->hSocket, reinterpret_cast(data.data()) + pnode->nSendOffset, data.size() - pnode->nSendOffset, MSG_NOSIGNAL | MSG_DONTWAIT); + nBytes = send(node.hSocket, reinterpret_cast(data.data()) + node.nSendOffset, data.size() - node.nSendOffset, MSG_NOSIGNAL | MSG_DONTWAIT); } if (nBytes > 0) { - pnode->nLastSend = GetSystemTimeInSeconds(); - pnode->nSendBytes += nBytes; - pnode->nSendOffset += nBytes; + node.nLastSend = GetSystemTimeInSeconds(); + node.nSendBytes += nBytes; + node.nSendOffset += nBytes; nSentSize += nBytes; - if (pnode->nSendOffset == data.size()) { - pnode->nSendOffset = 0; - pnode->nSendSize -= data.size(); - pnode->fPauseSend = pnode->nSendSize > nSendBufferMaxSize; + if (node.nSendOffset == data.size()) { + node.nSendOffset = 0; + node.nSendSize -= data.size(); + node.fPauseSend = node.nSendSize > nSendBufferMaxSize; it++; } else { // could not send full message; stop sending more - pnode->fCanSendData = false; + node.fCanSendData = false; break; } } else { @@ -912,22 +912,22 @@ size_t CConnman::SocketSendData(CNode *pnode) EXCLUSIVE_LOCKS_REQUIRED(pnode->cs int nErr = WSAGetLastError(); if (nErr != WSAEWOULDBLOCK && nErr != WSAEMSGSIZE && nErr != WSAEINTR && nErr != WSAEINPROGRESS) { - LogPrintf("socket send error %s (peer=%d)\n", NetworkErrorString(nErr), pnode->GetId()); - pnode->fDisconnect = true; + LogPrintf("socket send error %s (peer=%d)\n", NetworkErrorString(nErr), node.GetId()); + node.fDisconnect = true; } } // couldn't send anything at all - pnode->fCanSendData = false; + node.fCanSendData = false; break; } } - if (it == pnode->vSendMsg.end()) { - assert(pnode->nSendOffset == 0); - assert(pnode->nSendSize == 0); + if (it == node.vSendMsg.end()) { + assert(node.nSendOffset == 0); + assert(node.nSendSize == 0); } - pnode->vSendMsg.erase(pnode->vSendMsg.begin(), it); - pnode->nSendMsgSize = pnode->vSendMsg.size(); + node.vSendMsg.erase(node.vSendMsg.begin(), it); + node.nSendMsgSize = node.vSendMsg.size(); return nSentSize; } @@ -1940,7 +1940,7 @@ void CConnman::SocketHandler() } // Send data - size_t bytes_sent = WITH_LOCK(pnode->cs_vSend, return SocketSendData(pnode)); + size_t bytes_sent = WITH_LOCK(pnode->cs_vSend, return SocketSendData(*pnode)); if (bytes_sent) RecordBytesSent(bytes_sent); } diff --git a/src/net.h b/src/net.h index 3ed7512acb..a8f2413ef9 100644 --- a/src/net.h +++ b/src/net.h @@ -920,7 +920,7 @@ public: * @param[in] pnode The node which we are sending messages to. * @return True if there is more work to be done */ - virtual bool SendMessages(CNode* pnode) = 0; + virtual bool SendMessages(CNode* pnode) EXCLUSIVE_LOCKS_REQUIRED(pnode->cs_sendProcessing) = 0; protected: @@ -1377,7 +1377,7 @@ private: NodeId GetNewNodeId(); - size_t SocketSendData(CNode *pnode); + size_t SocketSendData(CNode& node) EXCLUSIVE_LOCKS_REQUIRED(node.cs_vSend); size_t SocketRecvData(CNode* pnode); void DumpAddresses();