@@ -51,7 +51,7 @@ struct CUpdatedBlock
51
51
52
52
static Mutex cs_blockchange;
53
53
static std::condition_variable cond_blockchange;
54
- static CUpdatedBlock latestblock;
54
+ static CUpdatedBlock latestblock GUARDED_BY (cs_blockchange) ;
55
55
56
56
CTxMemPool& EnsureMemPool ()
57
57
{
@@ -208,7 +208,7 @@ static UniValue getbestblockhash(const JSONRPCRequest& request)
208
208
void RPCNotifyBlockChange (bool ibd, const CBlockIndex * pindex)
209
209
{
210
210
if (pindex) {
211
- std::lock_guard<std::mutex> lock (cs_blockchange);
211
+ LOCK (cs_blockchange);
212
212
latestblock.hash = pindex->GetBlockHash ();
213
213
latestblock.height = pindex->nHeight ;
214
214
}
@@ -243,9 +243,9 @@ static UniValue waitfornewblock(const JSONRPCRequest& request)
243
243
WAIT_LOCK (cs_blockchange, lock);
244
244
block = latestblock;
245
245
if (timeout)
246
- cond_blockchange.wait_for (lock, std::chrono::milliseconds (timeout), [&block]{return latestblock.height != block.height || latestblock.hash != block.hash || !IsRPCRunning (); });
246
+ cond_blockchange.wait_for (lock, std::chrono::milliseconds (timeout), [&block]() EXCLUSIVE_LOCKS_REQUIRED (cs_blockchange) {return latestblock.height != block.height || latestblock.hash != block.hash || !IsRPCRunning (); });
247
247
else
248
- cond_blockchange.wait (lock, [&block]{return latestblock.height != block.height || latestblock.hash != block.hash || !IsRPCRunning (); });
248
+ cond_blockchange.wait (lock, [&block]() EXCLUSIVE_LOCKS_REQUIRED (cs_blockchange) {return latestblock.height != block.height || latestblock.hash != block.hash || !IsRPCRunning (); });
249
249
block = latestblock;
250
250
}
251
251
UniValue ret (UniValue::VOBJ);
@@ -285,9 +285,9 @@ static UniValue waitforblock(const JSONRPCRequest& request)
285
285
{
286
286
WAIT_LOCK (cs_blockchange, lock);
287
287
if (timeout)
288
- cond_blockchange.wait_for (lock, std::chrono::milliseconds (timeout), [&hash]{return latestblock.hash == hash || !IsRPCRunning ();});
288
+ cond_blockchange.wait_for (lock, std::chrono::milliseconds (timeout), [&hash]() EXCLUSIVE_LOCKS_REQUIRED (cs_blockchange) {return latestblock.hash == hash || !IsRPCRunning ();});
289
289
else
290
- cond_blockchange.wait (lock, [&hash]{return latestblock.hash == hash || !IsRPCRunning (); });
290
+ cond_blockchange.wait (lock, [&hash]() EXCLUSIVE_LOCKS_REQUIRED (cs_blockchange) {return latestblock.hash == hash || !IsRPCRunning (); });
291
291
block = latestblock;
292
292
}
293
293
@@ -329,9 +329,9 @@ static UniValue waitforblockheight(const JSONRPCRequest& request)
329
329
{
330
330
WAIT_LOCK (cs_blockchange, lock);
331
331
if (timeout)
332
- cond_blockchange.wait_for (lock, std::chrono::milliseconds (timeout), [&height]{return latestblock.height >= height || !IsRPCRunning ();});
332
+ cond_blockchange.wait_for (lock, std::chrono::milliseconds (timeout), [&height]() EXCLUSIVE_LOCKS_REQUIRED (cs_blockchange) {return latestblock.height >= height || !IsRPCRunning ();});
333
333
else
334
- cond_blockchange.wait (lock, [&height]{return latestblock.height >= height || !IsRPCRunning (); });
334
+ cond_blockchange.wait (lock, [&height]() EXCLUSIVE_LOCKS_REQUIRED (cs_blockchange) {return latestblock.height >= height || !IsRPCRunning (); });
335
335
block = latestblock;
336
336
}
337
337
UniValue ret (UniValue::VOBJ);
0 commit comments