Fix crash-on-osx-on-shutdown bug. And cleanup CDB handling in Rewrite.
authorGavin Andresen <gavinandresen@gmail.com>
Tue, 15 Nov 2011 19:30:15 +0000 (14:30 -0500)
committerLuke Dashjr <luke-jr+git@utopios.org>
Tue, 15 Nov 2011 21:59:52 +0000 (16:59 -0500)
src/db.cpp

index b2bd7e2..023dc59 100644 (file)
@@ -34,7 +34,14 @@ static void EnvShutdown(bool fRemoveLogFiles)
         return;
 
     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);
 
     if (fRemoveLogFiles)
@@ -229,7 +236,10 @@ bool CDB::Rewrite(const string& strFile, const char* pszSkip)
                         CDataStream ssValue;
                         int ret = db.ReadAtCursor(pcursor, ssKey, ssValue, DB_NEXT);
                         if (ret == DB_NOTFOUND)
+                        {
+                            pcursor->close();
                             break;
+                        }
                         else if (ret != 0)
                         {
                             pcursor->close();
@@ -253,14 +263,11 @@ bool CDB::Rewrite(const string& strFile, const char* pszSkip)
                     }
                 if (fSuccess)
                 {
-                    Db* pdb = mapDb[strFile];
-                    if (pdb->close(0))
-                        fSuccess = false;
+                    db.Close();
+                    CloseDb(strFile);
                     if (pdbCopy->close(0))
                         fSuccess = false;
-                    delete pdb;
                     delete pdbCopy;
-                    mapDb[strFile] = NULL;
                 }
                 if (fSuccess)
                 {