refactor: Avoid recursive locking in CAddrMan::Check

This commit is contained in:
Hennadii Stepanov 2021-05-23 19:32:03 +03:00
parent f77d9c79aa
commit 187b7d2bb3
No known key found for this signature in database
GPG Key ID: 410108112E7EA81F

View File

@ -585,12 +585,10 @@ public:
*/ */
std::vector<CAddress> GetAddr(size_t max_addresses, size_t max_pct, std::optional<Network> network) std::vector<CAddress> GetAddr(size_t max_addresses, size_t max_pct, std::optional<Network> network)
{ {
LOCK(cs);
Check(); Check();
std::vector<CAddress> vAddr; std::vector<CAddress> vAddr;
{ GetAddr_(vAddr, max_addresses, max_pct, network);
LOCK(cs);
GetAddr_(vAddr, max_addresses, max_pct, network);
}
Check(); Check();
return vAddr; return vAddr;
} }
@ -714,9 +712,10 @@ private:
//! Consistency check //! Consistency check
void Check() void Check()
EXCLUSIVE_LOCKS_REQUIRED(cs)
{ {
#ifdef DEBUG_ADDRMAN #ifdef DEBUG_ADDRMAN
LOCK(cs); AssertLockHeld(cs);
const int err = Check_(); const int err = Check_();
if (err) { if (err) {
LogPrintf("ADDRMAN CONSISTENCY CHECK FAILED!!! err=%i\n", err); LogPrintf("ADDRMAN CONSISTENCY CHECK FAILED!!! err=%i\n", err);