From: Pieter Wuille Date: Mon, 26 Mar 2012 18:17:35 +0000 (+0200) Subject: Use erase instead of rewrite to remove old addr entries X-Git-Tag: v0.4.0-unstable~129^2~130^2 X-Git-Url: https://git.novaco.in/?p=novacoin.git;a=commitdiff_plain;h=53cb1a49e744b9ebed85bb03ccd1a241cf818d74 Use erase instead of rewrite to remove old addr entries --- diff --git a/src/db.cpp b/src/db.cpp index 56c59cb..c18860a 100644 --- a/src/db.cpp +++ b/src/db.cpp @@ -714,22 +714,12 @@ bool CTxDB::LoadBlockIndex() // CAddrDB // -bool CAddrDB::WriteAddress(const CAddress& addr) -{ - return Write(make_pair(string("addr"), addr.GetKey()), addr); -} - bool CAddrDB::WriteAddrman(const CAddrMan& addrman) { return Write(string("addrman"), addrman); } -bool CAddrDB::EraseAddress(const CAddress& addr) -{ - return Erase(make_pair(string("addr"), addr.GetKey())); -} - -bool CAddrDB::LoadAddresses(bool &fUpdate) +bool CAddrDB::LoadAddresses() { bool fAddrMan = false; if (Read(string("addrman"), addrman)) @@ -739,6 +729,7 @@ bool CAddrDB::LoadAddresses(bool &fUpdate) } vector vAddr; + vector > vDelete; // Get cursor Dbc* pcursor = GetCursor(); @@ -762,7 +753,11 @@ bool CAddrDB::LoadAddresses(bool &fUpdate) if (strType == "addr") { if (fAddrMan) - fUpdate = true; + { + vector vchKey; + ssKey >> vchKey; + vDelete.push_back(vchKey); + } else { CAddress addr; @@ -774,6 +769,9 @@ bool CAddrDB::LoadAddresses(bool &fUpdate) } pcursor->close(); + BOOST_FOREACH(const vector &vchKey, vDelete) + Erase(make_pair(string("addr"), vchKey)); + if (!fAddrMan) { addrman.Add(vAddr, CNetAddr("0.0.0.0")); @@ -785,11 +783,7 @@ bool CAddrDB::LoadAddresses(bool &fUpdate) bool LoadAddresses() { - bool fUpdate = false; - bool fRet = CAddrDB("cr+").LoadAddresses(fUpdate); - if (fUpdate) - CDB::Rewrite("addr.dat", "\004addr"); - return fRet; + return CAddrDB("cr+").LoadAddresses(); } diff --git a/src/db.h b/src/db.h index 2a869d5..688c390 100644 --- a/src/db.h +++ b/src/db.h @@ -306,10 +306,8 @@ private: CAddrDB(const CAddrDB&); void operator=(const CAddrDB&); public: - bool WriteAddress(const CAddress& addr); - bool EraseAddress(const CAddress& addr); bool WriteAddrman(const CAddrMan& addr); - bool LoadAddresses(bool &fUpdate); + bool LoadAddresses(); }; bool LoadAddresses();