Added ability to respond to signals during Block Loading stage.
authorR E Broadley <rebroad+github@gmail.com>
Wed, 18 Apr 2012 11:30:24 +0000 (12:30 +0100)
committerR E Broadley <rebroad+github@gmail.com>
Wed, 18 Apr 2012 11:30:24 +0000 (12:30 +0100)
src/db.cpp
src/init.cpp

index c38070f..39a4189 100644 (file)
@@ -529,7 +529,7 @@ bool CTxDB::LoadBlockIndex()
         // Unserialize
         string strType;
         ssKey >> strType;
-        if (strType == "blockindex")
+        if (strType == "blockindex" && !fRequestShutdown)
         {
             CDiskBlockIndex diskindex;
             ssValue >> diskindex;
@@ -556,11 +556,14 @@ bool CTxDB::LoadBlockIndex()
         }
         else
         {
-            break;
+            break; // if shutdown requested or finished loading block index
         }
     }
     pcursor->close();
 
+    if (fRequestShutdown)
+        return true;
+
     // Calculate bnChainWork
     vector<pair<int, CBlockIndex*> > vSortedByHeight;
     vSortedByHeight.reserve(mapBlockIndex.size());
index 0eb37fe..14db9e7 100644 (file)
@@ -353,6 +353,15 @@ bool AppInit2(int argc, char* argv[])
     nStart = GetTimeMillis();
     if (!LoadBlockIndex())
         strErrors << _("Error loading blkindex.dat") << "\n";
+
+    // as LoadBlockIndex can take several minutes, it's possible the user
+    // requested to kill bitcoin-qt during the last operation. If so, exit.
+    // As the program has not fully started yet, Shutdown() is possibly overkill.
+    if (fRequestShutdown)
+    {
+        printf("Shutdown requested. Exiting.\n");
+        return false;
+    }
     printf(" block index %15"PRI64d"ms\n", GetTimeMillis() - nStart);
 
     InitMessage(_("Loading wallet..."));