Obsolete keypool and make sure database removes log files on shutdown.

This commit is contained in:
Gavin Andresen
2011-11-10 21:12:46 -05:00
parent 9e9869d0fe
commit d764d9161e
6 changed files with 89 additions and 36 deletions

View File

@@ -187,10 +187,12 @@ bool CWallet::EncryptWallet(const string& strWalletPassphrase)
}
Lock();
}
if (Resilver(strWalletFile))
CWalletDB(strWalletFile, "r+").WriteSetting("fIsResilvered", true);
// Need to completely rewrite the wallet file; if we don't, bdb might keep
// bits of the unencrypted private key in slack space in the database file.
setKeyPool.clear();
CDB::Rewrite(strWalletFile, "\x04pool");
}
return true;
}
@@ -1145,11 +1147,16 @@ int CWallet::LoadWallet(bool& fFirstRunRet)
return false;
fFirstRunRet = false;
int nLoadWalletRet = CWalletDB(strWalletFile,"cr+").LoadWallet(this);
if (nLoadWalletRet == DB_NEED_RESILVER)
if (nLoadWalletRet == DB_NEED_REWRITE)
{
if (Resilver(strWalletFile))
CWalletDB(strWalletFile, "r+").WriteSetting("fIsResilvered", true);
nLoadWalletRet = DB_LOAD_OK;
if (CDB::Rewrite(strWalletFile, "\x04pool"))
{
setKeyPool.clear();
// Note: can't top-up keypool here, because wallet is locked.
// User will be prompted to unlock wallet the next operation
// the requires a new key.
}
nLoadWalletRet = DB_NEED_REWRITE;
}
if (nLoadWalletRet != DB_LOAD_OK)