diff options
author | Anthony Towns <aj@erisian.com.au> | 2022-03-05 04:09:35 +1000 |
---|---|---|
committer | Anthony Towns <aj@erisian.com.au> | 2022-08-29 22:50:54 +1000 |
commit | bbec32c9ad2fe213314db9d39aa1eacff2e0bc23 (patch) | |
tree | 82087c39607c65f52f06b53546e9ec033766c9e0 | |
parent | 06ebdc886fcb4ca22f695bafe0956cff6d70a250 (diff) | |
download | bitcoin-bbec32c9ad2fe213314db9d39aa1eacff2e0bc23.tar.xz |
net: mark TransportSerializer/m_serializer as const
The (V1)TransportSerializer instance CNode::m_serializer is used from
multiple threads via PushMessage without protection by a mutex. This
is only thread safe because the class does not have any mutable state,
so document that by marking the methods and the object as "const".
-rw-r--r-- | src/net.cpp | 3 | ||||
-rw-r--r-- | src/net.h | 8 |
2 files changed, 6 insertions, 5 deletions
diff --git a/src/net.cpp b/src/net.cpp index c2e45898e8..cf0c9aef7b 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -797,7 +797,8 @@ CNetMessage V1TransportDeserializer::GetMessage(const std::chrono::microseconds return msg; } -void V1TransportSerializer::prepareForTransport(CSerializedNetMsg& msg, std::vector<unsigned char>& header) { +void V1TransportSerializer::prepareForTransport(CSerializedNetMsg& msg, std::vector<unsigned char>& header) const +{ // create dbl-sha256 checksum uint256 hash = Hash(msg.data); @@ -325,13 +325,13 @@ public: class TransportSerializer { public: // prepare message for transport (header construction, error-correction computation, payload encryption, etc.) - virtual void prepareForTransport(CSerializedNetMsg& msg, std::vector<unsigned char>& header) = 0; + virtual void prepareForTransport(CSerializedNetMsg& msg, std::vector<unsigned char>& header) const = 0; virtual ~TransportSerializer() {} }; -class V1TransportSerializer : public TransportSerializer { +class V1TransportSerializer : public TransportSerializer { public: - void prepareForTransport(CSerializedNetMsg& msg, std::vector<unsigned char>& header) override; + void prepareForTransport(CSerializedNetMsg& msg, std::vector<unsigned char>& header) const override; }; /** Information about a peer */ @@ -342,7 +342,7 @@ class CNode public: std::unique_ptr<TransportDeserializer> m_deserializer; - std::unique_ptr<TransportSerializer> m_serializer; + std::unique_ptr<const TransportSerializer> m_serializer; NetPermissionFlags m_permissionFlags{NetPermissionFlags::None}; |