diff --git a/src/db.cpp b/src/db.cpp index c38070f347..39a41894d7 100644 --- a/src/db.cpp +++ b/src/db.cpp @@ -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 > vSortedByHeight; vSortedByHeight.reserve(mapBlockIndex.size()); diff --git a/src/init.cpp b/src/init.cpp index 0eb37fe99c..14db9e7f5e 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -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..."));