mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-05-05 01:10:54 +02:00
[net processing] Improve documentation for Peer destruction/locking
Suggested here: - https://github.com/bitcoin/bitcoin/pull/19607#discussion_r467071878 - https://github.com/bitcoin/bitcoin/pull/19829#discussion_r546116786
This commit is contained in:
parent
f1dbf92ff0
commit
717a374e74
@ -791,6 +791,11 @@ void PeerManager::FinalizeNode(const CNode& node, bool& fUpdateConnectionTime) {
|
|||||||
LOCK(cs_main);
|
LOCK(cs_main);
|
||||||
int misbehavior{0};
|
int misbehavior{0};
|
||||||
{
|
{
|
||||||
|
// We remove the PeerRef from g_peer_map here, but we don't always
|
||||||
|
// destruct the Peer. Sometimes another thread is still holding a
|
||||||
|
// PeerRef, so the refcount is >= 1. Be careful not to do any
|
||||||
|
// processing here that assumes Peer won't be changed before it's
|
||||||
|
// destructed.
|
||||||
PeerRef peer = RemovePeer(nodeid);
|
PeerRef peer = RemovePeer(nodeid);
|
||||||
assert(peer != nullptr);
|
assert(peer != nullptr);
|
||||||
misbehavior = WITH_LOCK(peer->m_misbehavior_mutex, return peer->m_misbehavior_score);
|
misbehavior = WITH_LOCK(peer->m_misbehavior_mutex, return peer->m_misbehavior_score);
|
||||||
|
@ -46,6 +46,8 @@ struct CNodeStateStats {
|
|||||||
* Memory is owned by shared pointers and this object is destructed when
|
* Memory is owned by shared pointers and this object is destructed when
|
||||||
* the refcount drops to zero.
|
* the refcount drops to zero.
|
||||||
*
|
*
|
||||||
|
* Mutexes inside this struct must not be held when locking m_peer_mutex.
|
||||||
|
*
|
||||||
* TODO: move most members from CNodeState to this structure.
|
* TODO: move most members from CNodeState to this structure.
|
||||||
* TODO: move remaining application-layer data members from CNode to this structure.
|
* TODO: move remaining application-layer data members from CNode to this structure.
|
||||||
*/
|
*/
|
||||||
@ -210,7 +212,8 @@ private:
|
|||||||
* on extra block-relay-only peers. */
|
* on extra block-relay-only peers. */
|
||||||
bool m_initial_sync_finished{false};
|
bool m_initial_sync_finished{false};
|
||||||
|
|
||||||
/** Protects m_peer_map */
|
/** Protects m_peer_map. This mutex must not be locked while holding a lock
|
||||||
|
* on any of the mutexes inside a Peer object. */
|
||||||
mutable Mutex m_peer_mutex;
|
mutable Mutex m_peer_mutex;
|
||||||
/**
|
/**
|
||||||
* Map of all Peer objects, keyed by peer id. This map is protected
|
* Map of all Peer objects, keyed by peer id. This map is protected
|
||||||
|
Loading…
x
Reference in New Issue
Block a user