diff src/db.cpp @ 2097:3811124fc664 draft

Use erase instead of rewrite to remove old addr entries
author Pieter Wuille <pieter.wuille@gmail.com>
date Mon, 26 Mar 2012 20:17:35 +0200
parents f720f3c5ae27
children 8c6353ab7e73
line wrap: on
line diff
--- a/src/db.cpp
+++ b/src/db.cpp
@@ -714,22 +714,12 @@
 // 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 @@
     }
 
     vector<CAddress> vAddr;
+    vector<vector<unsigned char> > vDelete;
 
     // Get cursor
     Dbc* pcursor = GetCursor();
@@ -762,7 +753,11 @@
         if (strType == "addr")
         {
             if (fAddrMan)
-                fUpdate = true;
+            {
+                vector<unsigned char> vchKey;
+                ssKey >> vchKey;
+                vDelete.push_back(vchKey);
+            }
             else
             {
                 CAddress addr;
@@ -774,6 +769,9 @@
     }
     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 LoadAddresses()
 {
-    bool fUpdate = false;
-    bool fRet = CAddrDB("cr+").LoadAddresses(fUpdate);
-    if (fUpdate)
-        CDB::Rewrite("addr.dat", "\004addr");
-    return fRet;
+    return CAddrDB("cr+").LoadAddresses();
 }