Mercurial > hg > bitcoin
changeset 256:e4e826afefae draft
erase the bad chain after disconnecting it
git-svn-id: https://bitcoin.svn.sourceforge.net/svnroot/bitcoin/trunk@138 1a98c847-1fd6-4fd8-948a-caf3550aa51b
author | s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b> |
---|---|
date | Mon, 16 Aug 2010 17:51:10 +0000 |
parents | 835b9dd8e8cd |
children | ac702d01672b |
files | db.cpp |
diffstat | 1 files changed, 12 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/db.cpp +++ b/db.cpp @@ -460,9 +460,12 @@ ReadBestInvalidWork(bnBestInvalidWork); // Verify blocks in the best chain + vector<CBlockIndex*> vChain; + vector<CBlockIndex*> vBad; CBlockIndex* pindexFork = NULL; for (CBlockIndex* pindex = pindexBest; pindex && pindex->pprev; pindex = pindex->pprev) { + vChain.push_back(pindex); CBlock block; if (!block.ReadFromDisk(pindex)) return error("LoadBlockIndex() : block.ReadFromDisk failed"); @@ -470,6 +473,7 @@ { printf("LoadBlockIndex() : *** found bad block at %d, hash=%s\n", pindex->nHeight, pindex->GetBlockHash().ToString().c_str()); pindexFork = pindex->pprev; + vBad = vChain; } } if (pindexFork) @@ -480,6 +484,14 @@ return error("LoadBlockIndex() : block.ReadFromDisk failed"); CTxDB txdb; block.SetBestChain(txdb, pindexFork); + + // Delete the bad chain + foreach(CBlockIndex* pindex, vBad) + { + txdb.EraseBlockIndex(pindex->GetBlockHash()); + mapBlockIndex.erase(pindex->GetBlockHash()); + delete pindex; + } } return true;