@@ -41,6 +41,7 @@ class LockImpl : public Chain::Lock
4141{
4242 Optional<int > getHeight () override
4343 {
44+ LockAnnotation lock (::cs_main);
4445 int height = ::ChainActive ().Height ();
4546 if (height >= 0 ) {
4647 return height;
@@ -49,6 +50,7 @@ class LockImpl : public Chain::Lock
4950 }
5051 Optional<int > getBlockHeight (const uint256& hash) override
5152 {
53+ LockAnnotation lock (::cs_main);
5254 CBlockIndex* block = LookupBlockIndex (hash);
5355 if (block && ::ChainActive ().Contains (block)) {
5456 return block->nHeight ;
@@ -63,29 +65,34 @@ class LockImpl : public Chain::Lock
6365 }
6466 uint256 getBlockHash (int height) override
6567 {
68+ LockAnnotation lock (::cs_main);
6669 CBlockIndex* block = ::ChainActive ()[height];
6770 assert (block != nullptr );
6871 return block->GetBlockHash ();
6972 }
7073 int64_t getBlockTime (int height) override
7174 {
75+ LockAnnotation lock (::cs_main);
7276 CBlockIndex* block = ::ChainActive ()[height];
7377 assert (block != nullptr );
7478 return block->GetBlockTime ();
7579 }
7680 int64_t getBlockMedianTimePast (int height) override
7781 {
82+ LockAnnotation lock (::cs_main);
7883 CBlockIndex* block = ::ChainActive ()[height];
7984 assert (block != nullptr );
8085 return block->GetMedianTimePast ();
8186 }
8287 bool haveBlockOnDisk (int height) override
8388 {
89+ LockAnnotation lock (::cs_main);
8490 CBlockIndex* block = ::ChainActive ()[height];
8591 return block && ((block->nStatus & BLOCK_HAVE_DATA) != 0 ) && block->nTx > 0 ;
8692 }
8793 Optional<int > findFirstBlockWithTimeAndHeight (int64_t time, int height, uint256* hash) override
8894 {
95+ LockAnnotation lock (::cs_main);
8996 CBlockIndex* block = ::ChainActive ().FindEarliestAtLeast (time, height);
9097 if (block) {
9198 if (hash) *hash = block->GetBlockHash ();
@@ -95,6 +102,7 @@ class LockImpl : public Chain::Lock
95102 }
96103 Optional<int > findPruned (int start_height, Optional<int > stop_height) override
97104 {
105+ LockAnnotation lock (::cs_main);
98106 if (::fPruneMode ) {
99107 CBlockIndex* block = stop_height ? ::ChainActive ()[*stop_height] : ::ChainActive ().Tip ();
100108 while (block && block->nHeight >= start_height) {
@@ -108,6 +116,7 @@ class LockImpl : public Chain::Lock
108116 }
109117 Optional<int > findFork (const uint256& hash, Optional<int >* height) override
110118 {
119+ LockAnnotation lock (::cs_main);
111120 const CBlockIndex* block = LookupBlockIndex (hash);
112121 const CBlockIndex* fork = block ? ::ChainActive ().FindFork (block) : nullptr ;
113122 if (height) {
@@ -122,7 +131,11 @@ class LockImpl : public Chain::Lock
122131 }
123132 return nullopt ;
124133 }
125- CBlockLocator getTipLocator () override { return ::ChainActive ().GetLocator (); }
134+ CBlockLocator getTipLocator () override
135+ {
136+ LockAnnotation lock (::cs_main);
137+ return ::ChainActive ().GetLocator ();
138+ }
126139 Optional<int > findLocatorFork (const CBlockLocator& locator) override
127140 {
128141 LockAnnotation lock (::cs_main);
0 commit comments