@ -174,7 +174,18 @@ public:
CConnman ( uint64_t seed0 , uint64_t seed1 ) ;
CConnman ( uint64_t seed0 , uint64_t seed1 ) ;
~ CConnman ( ) ;
~ CConnman ( ) ;
bool Start ( CScheduler & scheduler , const Options & options ) ;
bool Start ( CScheduler & scheduler , const Options & options ) ;
void Stop ( ) ;
// TODO: Remove NO_THREAD_SAFETY_ANALYSIS. Lock cs_vNodes before reading the variable vNodes.
//
// When removing NO_THREAD_SAFETY_ANALYSIS be aware of the following lock order requirements:
// * CheckForStaleTipAndEvictPeers locks cs_main before indirectly calling GetExtraOutboundCount
// which locks cs_vNodes.
// * ProcessMessage locks cs_main and g_cs_orphans before indirectly calling ForEachNode which
// locks cs_vNodes.
//
// Thus the implicit locking order requirement is: (1) cs_main, (2) g_cs_orphans, (3) cs_vNodes.
void Stop ( ) NO_THREAD_SAFETY_ANALYSIS ;
void Interrupt ( ) ;
void Interrupt ( ) ;
bool GetNetworkActive ( ) const { return fNetworkActive ; } ;
bool GetNetworkActive ( ) const { return fNetworkActive ; } ;
bool GetUseAddrmanOutgoing ( ) const { return m_use_addrman_outgoing ; } ;
bool GetUseAddrmanOutgoing ( ) const { return m_use_addrman_outgoing ; } ;
@ -382,7 +393,7 @@ private:
CCriticalSection cs_vOneShots ;
CCriticalSection cs_vOneShots ;
std : : vector < std : : string > vAddedNodes GUARDED_BY ( cs_vAddedNodes ) ;
std : : vector < std : : string > vAddedNodes GUARDED_BY ( cs_vAddedNodes ) ;
CCriticalSection cs_vAddedNodes ;
CCriticalSection cs_vAddedNodes ;
std : : vector < CNode * > vNodes ;
std : : vector < CNode * > vNodes GUARDED_BY ( cs_vNodes ) ;
std : : list < CNode * > vNodesDisconnected ;
std : : list < CNode * > vNodesDisconnected ;
mutable CCriticalSection cs_vNodes ;
mutable CCriticalSection cs_vNodes ;
std : : atomic < NodeId > nLastNodeId { 0 } ;
std : : atomic < NodeId > nLastNodeId { 0 } ;