Use erase instead of rewrite to remove old addr entries
authorPieter Wuille <pieter.wuille@gmail.com>
Mon, 26 Mar 2012 18:17:35 +0000 (20:17 +0200)
committerPieter Wuille <pieter.wuille@gmail.com>
Mon, 26 Mar 2012 18:22:38 +0000 (20:22 +0200)
src/db.cpp
src/db.h

index 56c59cb..c18860a 100644 (file)
@@ -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();
 }
 
 
index 2a869d5..688c390 100644 (file)
--- 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();