diff options
author | Gavin Andresen <gavinandresen@gmail.com> | 2012-03-26 12:35:04 -0700 |
---|---|---|
committer | Gavin Andresen <gavinandresen@gmail.com> | 2012-03-26 12:35:04 -0700 |
commit | 84560c41c70d05772adae003ff468d94a3a72435 (patch) | |
tree | 09af404e167a089b4a603cf379c376e60c180f1a | |
parent | be4502968e18a121331c0fd90cffc4580ff024f3 (diff) | |
parent | 53cb1a49e744b9ebed85bb03ccd1a241cf818d74 (diff) |
Merge pull request #994 from sipa/deladdr
Use erase instead of rewrite to remove old addr entries
-rw-r--r-- | src/db.cpp | 28 | ||||
-rw-r--r-- | src/db.h | 4 |
2 files changed, 12 insertions, 20 deletions
diff --git a/src/db.cpp b/src/db.cpp index 56c59cbea7..c18860afcc 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<CAddress> vAddr; + vector<vector<unsigned char> > vDelete; // Get cursor Dbc* pcursor = GetCursor(); @@ -762,7 +753,11 @@ bool CAddrDB::LoadAddresses(bool &fUpdate) if (strType == "addr") { if (fAddrMan) - fUpdate = true; + { + vector<unsigned char> 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<unsigned char> &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(); } @@ -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(); |