]> Git Repo - VerusCoin.git/commitdiff
Exit cleanly if AppInit2 returns false
authorGavin Andresen <[email protected]>
Thu, 2 May 2013 16:26:33 +0000 (12:26 -0400)
committerGavin Andresen <[email protected]>
Thu, 2 May 2013 16:26:33 +0000 (12:26 -0400)
Bitcoin-Qt could core dump if application initialization failed in certain ways.

I double-fixed this:
1) qt/bitcoin.cpp now shuts down core threads cleanly if AppInit2 returns false
2) init.cpp now exits before StartNode() if strErrors is set (no reason to StartNode if we're just going to exit immediately anyway).

Tested by triggering all of the various ways AppInit2 can fail, either by passing bogus command-line arguments or just recompiling tweaked code to simulate failure.

This is a partial fix for #2480

src/init.cpp
src/qt/bitcoin.cpp

index 3845cfad81a2e15b053bb7afe045ca71fd2ec4c6..c2259f1d76d08865a9e55dc86a1628e414b5d5a3 100644 (file)
@@ -1033,6 +1033,9 @@ bool AppInit2(boost::thread_group& threadGroup)
     if (!CheckDiskSpace())
         return false;
 
+    if (!strErrors.str().empty())
+        return InitError(strErrors.str());
+
     RandAddSeedPerfmon();
 
     //// debug print
@@ -1054,9 +1057,6 @@ bool AppInit2(boost::thread_group& threadGroup)
 
     uiInterface.InitMessage(_("Done loading"));
 
-    if (!strErrors.str().empty())
-        return InitError(strErrors.str());
-
      // Add wallet transactions that aren't already in a block to mapTransactions
     pwalletMain->ReacceptWalletTransactions();
 
index 25448ea8cfba5d61ea8401cc1d90cd49872d0e4d..a567eafd5cc98828f1ccfd08e11b0dd545f86adc 100644 (file)
@@ -271,6 +271,9 @@ int main(int argc, char *argv[])
         }
         else
         {
+            threadGroup.interrupt_all();
+            threadGroup.join_all();
+            Shutdown();
             return 1;
         }
     } catch (std::exception& e) {
This page took 0.03002 seconds and 4 git commands to generate.