diff options
author | MarcoFalke <falke.marco@gmail.com> | 2021-08-02 13:42:42 +0200 |
---|---|---|
committer | John Newbery <john@johnnewbery.com> | 2021-08-05 15:24:12 +0100 |
commit | ee458d84fc187d69f002ebead6fccc4f4f9c0744 (patch) | |
tree | 8929ebc0f1544e8e2845c89298ab20d8194ec540 /src | |
parent | d67330d11245b11fbdd5e2dd5343ee451186931e (diff) |
Add missing const to CAddrMan::Check_()
Also: Always compile the function signature to avoid similar issues in
the future.
Diffstat (limited to 'src')
-rw-r--r-- | src/addrman.cpp | 21 | ||||
-rw-r--r-- | 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<int> 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<CAddress>& vAddr, size_t max_addresses, size_t max_pct, std::optional<Network> 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. |