aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGavin Andresen <gavinandresen@gmail.com>2012-03-29 13:34:07 -0400
committerGavin Andresen <gavinandresen@gmail.com>2012-03-29 13:34:07 -0400
commit6293a9f87f8883fecb18042681407d1de6c20485 (patch)
tree7f83267abe52c5b3f50ebc3cfc61c11c0da37c45
parent83e914c1d5a0d46461bbc04ad0224ff7151fb323 (diff)
downloadbitcoin-6293a9f87f8883fecb18042681407d1de6c20485.tar.xz
Workaround hangs when upgrading old addr.dat files
-rw-r--r--src/db.cpp33
1 files changed, 11 insertions, 22 deletions
diff --git a/src/db.cpp b/src/db.cpp
index 2dc86e79fa..79c4e4778f 100644
--- a/src/db.cpp
+++ b/src/db.cpp
@@ -722,12 +722,13 @@ bool CAddrDB::WriteAddrman(const CAddrMan& addrman)
bool CAddrDB::LoadAddresses()
{
- bool fAddrMan = false;
if (Read(string("addrman"), addrman))
{
printf("Loaded %i addresses\n", addrman.size());
- fAddrMan = true;
+ return true;
}
+
+ // Read pre-0.6 addr records
vector<CAddress> vAddr;
vector<vector<unsigned char> > vDelete;
@@ -753,31 +754,19 @@ bool CAddrDB::LoadAddresses()
ssKey >> strType;
if (strType == "addr")
{
- if (fAddrMan)
- {
- vector<unsigned char> vchKey;
- ssKey >> vchKey;
- vDelete.push_back(vchKey);
- }
- else
- {
- CAddress addr;
- ssValue >> addr;
- vAddr.push_back(addr);
- }
-
+ CAddress addr;
+ ssValue >> addr;
+ vAddr.push_back(addr);
}
}
pcursor->close();
- BOOST_FOREACH(const vector<unsigned char> &vchKey, vDelete)
- Erase(make_pair(string("addr"), vchKey));
+ addrman.Add(vAddr, CNetAddr("0.0.0.0"));
+ printf("Loaded %i addresses\n", addrman.size());
- if (!fAddrMan)
- {
- addrman.Add(vAddr, CNetAddr("0.0.0.0"));
- printf("Loaded %i addresses\n", addrman.size());
- }
+ // Note: old records left; we ran into hangs-on-startup
+ // bugs for some users who (we think) were running after
+ // an unclean shutdown.
return true;
}