Fix crash-on-osx-on-shutdown bug. And cleanup CDB handling in Rewrite.

This commit is contained in:
Gavin Andresen 2011-11-15 14:30:15 -05:00
parent 709c1b267f
commit 8d0923109d
1 changed files with 13 additions and 6 deletions

View File

@ -34,7 +34,14 @@ static void EnvShutdown(bool fRemoveLogFiles)
return; return;
fDbEnvInit = false; fDbEnvInit = false;
dbenv.close(0); try
{
dbenv.close(0);
}
catch (const DbException& e)
{
printf("EnvShutdown exception: %s (%d)\n", e.what(), e.get_errno());
}
DbEnv(0).remove(GetDataDir().c_str(), 0); DbEnv(0).remove(GetDataDir().c_str(), 0);
if (fRemoveLogFiles) if (fRemoveLogFiles)
@ -229,7 +236,10 @@ bool CDB::Rewrite(const string& strFile, const char* pszSkip)
CDataStream ssValue; CDataStream ssValue;
int ret = db.ReadAtCursor(pcursor, ssKey, ssValue, DB_NEXT); int ret = db.ReadAtCursor(pcursor, ssKey, ssValue, DB_NEXT);
if (ret == DB_NOTFOUND) if (ret == DB_NOTFOUND)
{
pcursor->close();
break; break;
}
else if (ret != 0) else if (ret != 0)
{ {
pcursor->close(); pcursor->close();
@ -253,14 +263,11 @@ bool CDB::Rewrite(const string& strFile, const char* pszSkip)
} }
if (fSuccess) if (fSuccess)
{ {
Db* pdb = mapDb[strFile]; db.Close();
if (pdb->close(0)) CloseDb(strFile);
fSuccess = false;
if (pdbCopy->close(0)) if (pdbCopy->close(0))
fSuccess = false; fSuccess = false;
delete pdb;
delete pdbCopy; delete pdbCopy;
mapDb[strFile] = NULL;
} }
if (fSuccess) if (fSuccess)
{ {