From ee458d84fc187d69f002ebead6fccc4f4f9c0744 Mon Sep 17 00:00:00 2001 From: MarcoFalke Date: Mon, 2 Aug 2021 13:42:42 +0200 Subject: [PATCH] Add missing const to CAddrMan::Check_() Also: Always compile the function signature to avoid similar issues in the future. --- src/addrman.cpp | 21 ++++++++++++++------- src/addrman.h | 4 ---- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/addrman.cpp b/src/addrman.cpp index 96139182d3..c5c6dfbb86 100644 --- a/src/addrman.cpp +++ b/src/addrman.cpp @@ -431,9 +431,9 @@ CAddrInfo CAddrMan::Select_(bool newOnly) const } } -#ifdef DEBUG_ADDRMAN -int CAddrMan::Check_() +int CAddrMan::Check_() const { +#ifdef DEBUG_ADDRMAN AssertLockHeld(cs); std::unordered_set setTried; @@ -458,8 +458,10 @@ int CAddrMan::Check_() return -4; mapNew[n] = info.nRefCount; } - if (mapAddr[info] != n) + const auto it{mapAddr.find(info)}; + if (it == mapAddr.end() || it->second != n) { return -5; + } if (info.nRandomPos < 0 || (size_t)info.nRandomPos >= vRandom.size() || vRandom[info.nRandomPos] != n) return -14; if (info.nLastTry < 0) @@ -478,10 +480,13 @@ int CAddrMan::Check_() if (vvTried[n][i] != -1) { if (!setTried.count(vvTried[n][i])) return -11; - if (mapInfo[vvTried[n][i]].GetTriedBucket(nKey, m_asmap) != n) + const auto it{mapInfo.find(vvTried[n][i])}; + if (it == mapInfo.end() || it->second.GetTriedBucket(nKey, m_asmap) != n) { return -17; - if (mapInfo[vvTried[n][i]].GetBucketPosition(nKey, false, n) != i) + } + if (it->second.GetBucketPosition(nKey, false, n) != i) { return -18; + } setTried.erase(vvTried[n][i]); } } @@ -492,8 +497,10 @@ int CAddrMan::Check_() if (vvNew[n][i] != -1) { if (!mapNew.count(vvNew[n][i])) return -12; - if (mapInfo[vvNew[n][i]].GetBucketPosition(nKey, true, n) != i) + const auto it{mapInfo.find(vvNew[n][i])}; + if (it == mapInfo.end() || it->second.GetBucketPosition(nKey, true, n) != i) { return -19; + } if (--mapNew[vvNew[n][i]] == 0) mapNew.erase(vvNew[n][i]); } @@ -507,9 +514,9 @@ int CAddrMan::Check_() if (nKey.IsNull()) return -16; +#endif // DEBUG_ADDRMAN return 0; } -#endif void CAddrMan::GetAddr_(std::vector& vAddr, size_t max_addresses, size_t max_pct, std::optional network) const { diff --git a/src/addrman.h b/src/addrman.h index 1dd1932421..16be374f7b 100644 --- a/src/addrman.h +++ b/src/addrman.h @@ -738,19 +738,15 @@ private: void Check() const EXCLUSIVE_LOCKS_REQUIRED(cs) { -#ifdef DEBUG_ADDRMAN AssertLockHeld(cs); const int err = Check_(); if (err) { LogPrintf("ADDRMAN CONSISTENCY CHECK FAILED!!! err=%i\n", err); } -#endif } -#ifdef DEBUG_ADDRMAN //! Perform consistency check. Returns an error code or zero. int Check_() const EXCLUSIVE_LOCKS_REQUIRED(cs); -#endif /** * Return all or many randomly selected addresses, optionally by network.