Page MenuHomePhabricator

D5690.id18730.diff
No OneTemporary

D5690.id18730.diff

diff --git a/src/net.h b/src/net.h
--- a/src/net.h
+++ b/src/net.h
@@ -173,7 +173,21 @@
~CConnman();
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();
bool GetNetworkActive() const { return fNetworkActive; };
void SetNetworkActive(bool active);
@@ -386,7 +400,7 @@
CCriticalSection cs_vOneShots;
std::vector<std::string> vAddedNodes GUARDED_BY(cs_vAddedNodes);
CCriticalSection cs_vAddedNodes;
- std::vector<CNode *> vNodes;
+ std::vector<CNode *> vNodes GUARDED_BY(cs_vNodes);
std::list<CNode *> vNodesDisconnected;
mutable CCriticalSection cs_vNodes;
std::atomic<NodeId> nLastNodeId{0};

File Metadata

Mime Type
text/plain
Expires
Tue, May 20, 21:39 (15 h, 36 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5864716
Default Alt Text
D5690.id18730.diff (1 KB)

Event Timeline