Skip to content

Commit

Permalink
Merge bitcoin#20816: net: Move RecordBytesSent() call out of cs_vSend…
Browse files Browse the repository at this point in the history
… lock

378aedc [net] Add cs_vSend lock annotations (John Newbery)
6732545 [net] Move RecordBytesSent() call out of cs_vSend lock (John Newbery)

Pull request description:

  RecordBytesSent() does not require cs_vSend to be locked, so reduce the scope of cs_vSend.

  Also correctly annotate the CNode data members that are guarded by cs_vSend.

  This is a simpler alternative to bitcoin#19673.

ACKs for top commit:
  jnewbery:
    ok, reverting to commit 378aedc which has two ACKs already. Any style issues can be fixed up in future PRs.
  troygiorshev:
    ACK 378aedc
  theStack:
    re-ACK 378aedc
  MarcoFalke:
    review ACK 378aedc 🔌

Tree-SHA512: e9cd6c472b7e1479120c1bf2d1c640cf6d18c7d589a5f9b7dfc4875e5790adaab403a7a1b945a47e79e7249a614b8583270e4549f89b22e8a9edb2e4818b0d07
  • Loading branch information
MarcoFalke authored and vijaydasmp committed Aug 3, 2023
1 parent d9a0b32 commit 292e93a
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 8 deletions.
8 changes: 3 additions & 5 deletions src/net.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1879,11 +1879,9 @@ void CConnman::SocketHandler()
break;
}

LOCK(pnode->cs_vSend);
size_t nBytes = SocketSendData(pnode);
if (nBytes) {
RecordBytesSent(nBytes);
}
// Send data
size_t bytes_sent = WITH_LOCK(pnode->cs_vSend, return SocketSendData(pnode));
if (bytes_sent) RecordBytesSent(bytes_sent);
}

ReleaseNodeVector(vErrorNodes);
Expand Down
8 changes: 5 additions & 3 deletions src/net.h
Original file line number Diff line number Diff line change
Expand Up @@ -1030,8 +1030,10 @@ class CNode
NetPermissionFlags m_permissionFlags{ PF_NONE };
std::atomic<ServiceFlags> nServices{NODE_NONE};
SOCKET hSocket GUARDED_BY(cs_hSocket);
size_t nSendSize{0}; // total size of all vSendMsg entries
size_t nSendOffset{0}; // offset inside the first vSendMsg already sent
/** Total size of all vSendMsg entries */
size_t nSendSize GUARDED_BY(cs_vSend){0};
/** Offset inside the first vSendMsg already sent */
size_t nSendOffset GUARDED_BY(cs_vSend){0};
uint64_t nSendBytes GUARDED_BY(cs_vSend){0};
std::list<std::vector<unsigned char>> vSendMsg GUARDED_BY(cs_vSend);
std::atomic<size_t> nSendMsgSize{0};
Expand Down Expand Up @@ -1123,7 +1125,7 @@ class CNode
Network ConnectedThroughNetwork() const;

protected:
mapMsgCmdSize mapSendBytesPerMsgCmd;
mapMsgCmdSize mapSendBytesPerMsgCmd GUARDED_BY(cs_vSend);
mapMsgCmdSize mapRecvBytesPerMsgCmd GUARDED_BY(cs_vRecv);

public:
Expand Down

0 comments on commit 292e93a

Please sign in to comment.