diff options
-rw-r--r-- | src/addrman.cpp | 26 | ||||
-rw-r--r-- | src/addrman.h | 44 | ||||
-rw-r--r-- | src/test/addrman_tests.cpp | 2 |
3 files changed, 32 insertions, 40 deletions
diff --git a/src/addrman.cpp b/src/addrman.cpp index e8f98f727b..690ea19c30 100644 --- a/src/addrman.cpp +++ b/src/addrman.cpp @@ -77,6 +77,32 @@ double CAddrInfo::GetChance(int64_t nNow) const return fChance; } +CAddrMan::CAddrMan(bool deterministic, int32_t consistency_check_ratio) + : insecure_rand{deterministic} + , m_consistency_check_ratio{consistency_check_ratio} +{ + std::vector<int>().swap(vRandom); + nKey = insecure_rand.rand256(); + for (size_t bucket = 0; bucket < ADDRMAN_NEW_BUCKET_COUNT; bucket++) { + for (size_t entry = 0; entry < ADDRMAN_BUCKET_SIZE; entry++) { + vvNew[bucket][entry] = -1; + } + } + for (size_t bucket = 0; bucket < ADDRMAN_TRIED_BUCKET_COUNT; bucket++) { + for (size_t entry = 0; entry < ADDRMAN_BUCKET_SIZE; entry++) { + vvTried[bucket][entry] = -1; + } + } + + nIdCount = 0; + nTried = 0; + nNew = 0; + nLastGood = 1; //Initially at 1 so that "never" is strictly worse. + mapInfo.clear(); + mapAddr.clear(); + if (deterministic) nKey = uint256{1}; +} + CAddrInfo* CAddrMan::Find(const CNetAddr& addr, int* pnId) { AssertLockHeld(cs); diff --git a/src/addrman.h b/src/addrman.h index c2df87e986..3d49c2583f 100644 --- a/src/addrman.h +++ b/src/addrman.h @@ -471,40 +471,7 @@ public: Check(); } -private: - void Clear() - EXCLUSIVE_LOCKS_REQUIRED(!cs) - { - LOCK(cs); - std::vector<int>().swap(vRandom); - nKey = insecure_rand.rand256(); - for (size_t bucket = 0; bucket < ADDRMAN_NEW_BUCKET_COUNT; bucket++) { - for (size_t entry = 0; entry < ADDRMAN_BUCKET_SIZE; entry++) { - vvNew[bucket][entry] = -1; - } - } - for (size_t bucket = 0; bucket < ADDRMAN_TRIED_BUCKET_COUNT; bucket++) { - for (size_t entry = 0; entry < ADDRMAN_BUCKET_SIZE; entry++) { - vvTried[bucket][entry] = -1; - } - } - - nIdCount = 0; - nTried = 0; - nNew = 0; - nLastGood = 1; //Initially at 1 so that "never" is strictly worse. - mapInfo.clear(); - mapAddr.clear(); - } - -public: - explicit CAddrMan(bool deterministic, int32_t consistency_check_ratio) - : insecure_rand{deterministic}, - m_consistency_check_ratio{consistency_check_ratio} - { - Clear(); - if (deterministic) nKey = uint256{1}; - } + explicit CAddrMan(bool deterministic, int32_t consistency_check_ratio); ~CAddrMan() { @@ -626,17 +593,16 @@ public: Check(); } -protected: - //! secret key to randomize bucket select with - uint256 nKey; - +private: //! A mutex to protect the inner data structures. mutable Mutex cs; -private: //! Source of random numbers for randomization in inner loops mutable FastRandomContext insecure_rand GUARDED_BY(cs); + //! secret key to randomize bucket select with + uint256 nKey; + //! Serialization versions. enum Format : uint8_t { V0_HISTORICAL = 0, //!< historic format, before commit e6b343d88 diff --git a/src/test/addrman_tests.cpp b/src/test/addrman_tests.cpp index 50be342630..cd5dc2370f 100644 --- a/src/test/addrman_tests.cpp +++ b/src/test/addrman_tests.cpp @@ -48,7 +48,7 @@ public: unsigned char nVersion = 1; s << nVersion; s << ((unsigned char)32); - s << nKey; + s << uint256::ONE; s << 10; // nNew s << 10; // nTried |