Skip to content

Commit f8d1e5b

Browse files
committed
merge bitcoin#25174: Add thread safety related annotations for CNode and Peer
1 parent 4847f6e commit f8d1e5b

File tree

3 files changed

+15
-15
lines changed

3 files changed

+15
-15
lines changed

src/net.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -932,7 +932,8 @@ CNetMessage V1TransportDeserializer::GetMessage(const std::chrono::microseconds
932932
return msg;
933933
}
934934

935-
void V1TransportSerializer::prepareForTransport(CSerializedNetMsg& msg, std::vector<unsigned char>& header) {
935+
void V1TransportSerializer::prepareForTransport(CSerializedNetMsg& msg, std::vector<unsigned char>& header) const
936+
{
936937
// create dbl-sha256 checksum
937938
uint256 hash = Hash(msg.data);
938939

@@ -4126,7 +4127,9 @@ ServiceFlags CConnman::GetLocalServices() const
41264127
unsigned int CConnman::GetReceiveFloodSize() const { return nReceiveFloodSize; }
41274128

41284129
CNode::CNode(NodeId idIn, ServiceFlags nLocalServicesIn, std::shared_ptr<Sock> sock, const CAddress& addrIn, uint64_t nKeyedNetGroupIn, uint64_t nLocalHostNonceIn, const CAddress& addrBindIn, const std::string& addrNameIn, ConnectionType conn_type_in, bool inbound_onion, std::unique_ptr<i2p::sam::Session>&& i2p_sam_session)
4129-
: m_sock{sock},
4130+
: m_deserializer{std::make_unique<V1TransportDeserializer>(V1TransportDeserializer(Params(), idIn, SER_NETWORK, INIT_PROTO_VERSION))},
4131+
m_serializer{std::make_unique<V1TransportSerializer>(V1TransportSerializer())},
4132+
m_sock{sock},
41304133
m_connected{GetTime<std::chrono::seconds>()},
41314134
addr{addrIn},
41324135
addrBind{addrBindIn},
@@ -4150,9 +4153,6 @@ CNode::CNode(NodeId idIn, ServiceFlags nLocalServicesIn, std::shared_ptr<Sock> s
41504153
} else {
41514154
LogPrint(BCLog::NET, "Added connection peer=%d\n", id);
41524155
}
4153-
4154-
m_deserializer = std::make_unique<V1TransportDeserializer>(V1TransportDeserializer(Params(), id, SER_NETWORK, INIT_PROTO_VERSION));
4155-
m_serializer = std::make_unique<V1TransportSerializer>(V1TransportSerializer());
41564156
}
41574157

41584158
bool CConnman::NodeFullyConnected(const CNode* pnode)

src/net.h

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -427,13 +427,13 @@ class V1TransportDeserializer final : public TransportDeserializer
427427
class TransportSerializer {
428428
public:
429429
// prepare message for transport (header construction, error-correction computation, payload encryption, etc.)
430-
virtual void prepareForTransport(CSerializedNetMsg& msg, std::vector<unsigned char>& header) = 0;
430+
virtual void prepareForTransport(CSerializedNetMsg& msg, std::vector<unsigned char>& header) const = 0;
431431
virtual ~TransportSerializer() {}
432432
};
433433

434-
class V1TransportSerializer : public TransportSerializer {
434+
class V1TransportSerializer : public TransportSerializer {
435435
public:
436-
void prepareForTransport(CSerializedNetMsg& msg, std::vector<unsigned char>& header) override;
436+
void prepareForTransport(CSerializedNetMsg& msg, std::vector<unsigned char>& header) const override;
437437
};
438438

439439
/** Information about a peer */
@@ -443,10 +443,10 @@ class CNode
443443
friend struct ConnmanTestMsg;
444444

445445
public:
446-
std::unique_ptr<TransportDeserializer> m_deserializer;
447-
std::unique_ptr<TransportSerializer> m_serializer;
446+
const std::unique_ptr<TransportDeserializer> m_deserializer; // Used only by SocketHandler thread
447+
const std::unique_ptr<const TransportSerializer> m_serializer;
448448

449-
NetPermissionFlags m_permissionFlags{ NetPermissionFlags::None };
449+
NetPermissionFlags m_permissionFlags{NetPermissionFlags::None}; // treated as const outside of fuzz tester
450450
std::atomic<ServiceFlags> nServices{NODE_NONE};
451451

452452
/**
@@ -472,7 +472,7 @@ class CNode
472472

473473
RecursiveMutex cs_vProcessMsg;
474474
std::list<CNetMessage> vProcessMsg GUARDED_BY(cs_vProcessMsg);
475-
size_t nProcessQueueSize{0};
475+
size_t nProcessQueueSize GUARDED_BY(cs_vProcessMsg){0};
476476

477477
RecursiveMutex cs_sendProcessing;
478478

@@ -501,7 +501,7 @@ class CNode
501501
* from the wire. This cleaned string can safely be logged or displayed.
502502
*/
503503
std::string cleanSubVer GUARDED_BY(m_subver_mutex){};
504-
bool m_prefer_evict{false}; // This peer is preferred for eviction.
504+
bool m_prefer_evict{false}; // This peer is preferred for eviction. (treated as const)
505505
bool HasPermission(NetPermissionFlags permission) const {
506506
return NetPermissions::HasFlag(m_permissionFlags, permission);
507507
}

src/net_processing.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -519,14 +519,14 @@ class PeerManagerImpl final : public PeerManager
519519
std::atomic<int> m_best_height{-1};
520520

521521
/** Next time to check for stale tip */
522-
std::chrono::seconds m_stale_tip_check_time{0s};
522+
std::chrono::seconds m_stale_tip_check_time GUARDED_BY(cs_main){0s};
523523

524524
/** Whether this node is running in blocks only mode */
525525
const bool m_ignore_incoming_txs;
526526

527527
/** Whether we've completed initial sync yet, for determining when to turn
528528
* on extra block-relay-only peers. */
529-
bool m_initial_sync_finished{false};
529+
bool m_initial_sync_finished GUARDED_BY(cs_main){false};
530530

531531
/** Protects m_peer_map. This mutex must not be locked while holding a lock
532532
* on any of the mutexes inside a Peer object. */

0 commit comments

Comments
 (0)