From ef26f2f421071986a3878a1a94b0149ae8e16fcd Mon Sep 17 00:00:00 2001 From: Anthony Towns Date: Fri, 20 May 2022 05:37:54 +1000 Subject: [PATCH] net: mark CNode unique_ptr members as const Dereferencing a unique_ptr is not necessarily thread safe. The reason these are safe is because their values are set at construction and do not change later; so mark them as const and set them via the initializer list to guarantee that. --- src/net.cpp | 7 +++---- src/net.h | 4 ++-- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/net.cpp b/src/net.cpp index cf0c9aef7ba..535a5ce8e2d 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -2723,7 +2723,9 @@ CNode::CNode(NodeId idIn, ConnectionType conn_type_in, bool inbound_onion, std::unique_ptr&& i2p_sam_session) - : m_sock{sock}, + : m_deserializer{std::make_unique(V1TransportDeserializer(Params(), idIn, SER_NETWORK, INIT_PROTO_VERSION))}, + m_serializer{std::make_unique(V1TransportSerializer())}, + m_sock{sock}, m_connected{GetTime()}, addr{addrIn}, addrBind{addrBindIn}, @@ -2746,9 +2748,6 @@ CNode::CNode(NodeId idIn, } else { LogPrint(BCLog::NET, "Added connection peer=%d\n", id); } - - m_deserializer = std::make_unique(V1TransportDeserializer(Params(), id, SER_NETWORK, INIT_PROTO_VERSION)); - m_serializer = std::make_unique(V1TransportSerializer()); } bool CConnman::NodeFullyConnected(const CNode* pnode) diff --git a/src/net.h b/src/net.h index 97389314b2b..d062b8a9ffb 100644 --- a/src/net.h +++ b/src/net.h @@ -341,8 +341,8 @@ class CNode friend struct ConnmanTestMsg; public: - std::unique_ptr m_deserializer; - std::unique_ptr m_serializer; + const std::unique_ptr m_deserializer; // Used only by SocketHandler thread + const std::unique_ptr m_serializer; NetPermissionFlags m_permissionFlags{NetPermissionFlags::None};