From 53cb1a49e744b9ebed85bb03ccd1a241cf818d74 Mon Sep 17 00:00:00 2001 From: Pieter Wuille Date: Mon, 26 Mar 2012 20:17:35 +0200 Subject: [PATCH] Use erase instead of rewrite to remove old addr entries --- src/db.cpp | 28 +++++++++++----------------- src/db.h | 4 +--- 2 files changed, 12 insertions(+), 20 deletions(-) diff --git a/src/db.cpp b/src/db.cpp index 56c59cbea..c18860afc 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 2a869d511..688c390e4 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();