Browse Source

Do not launch Shutdown in a new thread in case we are running the UI.

This leads to the bitcoin core being shut down while the UI is accessing it, and generally results in a segmentation fault or crash. In case it is desirable to make it possible to shutdown the GUI from its RPC server, we'll need to implement a signal for it. For the mean time, this is a safe stopgap.
miguelfreitas
Wladimir J. van der Laan 13 years ago
parent
commit
19197d5e29
  1. 9
      src/bitcoinrpc.cpp

9
src/bitcoinrpc.cpp

@ -160,10 +160,13 @@ Value stop(const Array& params, bool fHelp)
throw runtime_error( throw runtime_error(
"stop\n" "stop\n"
"Stop bitcoin server."); "Stop bitcoin server.");
#ifndef QT_GUI
// Shutdown will take long enough that the response should get back // Shutdown will take long enough that the response should get back
CreateThread(Shutdown, NULL); CreateThread(Shutdown, NULL);
return "bitcoin server stopping"; return "bitcoin server stopping";
#else
throw runtime_error("NYI: cannot shut down GUI with RPC command");
#endif
} }
@ -2175,11 +2178,13 @@ void ThreadRPCServer2(void* parg)
else if (mapArgs.count("-daemon")) else if (mapArgs.count("-daemon"))
strWhatAmI = strprintf(_("To use the %s option"), "\"-daemon\""); strWhatAmI = strprintf(_("To use the %s option"), "\"-daemon\"");
PrintConsole( PrintConsole(
_("Warning: %s, you must set rpcpassword=<password>\nin the configuration file: %s\n" _("Error: %s, you must set rpcpassword=<password>\nin the configuration file: %s\n"
"If the file does not exist, create it with owner-readable-only file permissions.\n"), "If the file does not exist, create it with owner-readable-only file permissions.\n"),
strWhatAmI.c_str(), strWhatAmI.c_str(),
GetConfigFile().c_str()); GetConfigFile().c_str());
#ifndef QT_GUI
CreateThread(Shutdown, NULL); CreateThread(Shutdown, NULL);
#endif
return; return;
} }

Loading…
Cancel
Save