aboutsummaryrefslogtreecommitdiff
path: root/src/init.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/init.cpp')
-rw-r--r--src/init.cpp37
1 files changed, 18 insertions, 19 deletions
diff --git a/src/init.cpp b/src/init.cpp
index c7ea40817d..2131a6adc0 100644
--- a/src/init.cpp
+++ b/src/init.cpp
@@ -209,11 +209,7 @@ void Shutdown()
// using the other before destroying them.
if (peerLogic) UnregisterValidationInterface(peerLogic.get());
if (g_connman) g_connman->Stop();
- peerLogic.reset();
- g_connman.reset();
- if (g_txindex) {
- g_txindex.reset();
- }
+ if (g_txindex) g_txindex->Stop();
StopTorControl();
@@ -222,6 +218,12 @@ void Shutdown()
threadGroup.interrupt_all();
threadGroup.join_all();
+ // After the threads that potentially access these pointers have been stopped,
+ // destruct and reset all to nullptr.
+ peerLogic.reset();
+ g_connman.reset();
+ g_txindex.reset();
+
if (g_is_mempool_loaded && gArgs.GetArg("-persistmempool", DEFAULT_PERSIST_MEMPOOL)) {
DumpMempool();
}
@@ -326,12 +328,12 @@ static void registerSignalHandler(int signal, void(*handler)(int))
static void OnRPCStarted()
{
- uiInterface.NotifyBlockTip.connect(&RPCNotifyBlockChange);
+ uiInterface.NotifyBlockTip_connect(&RPCNotifyBlockChange);
}
static void OnRPCStopped()
{
- uiInterface.NotifyBlockTip.disconnect(&RPCNotifyBlockChange);
+ uiInterface.NotifyBlockTip_disconnect(&RPCNotifyBlockChange);
RPCNotifyBlockChange(false, nullptr);
g_best_block_cv.notify_all();
LogPrint(BCLog::RPC, "RPC stopped.\n");
@@ -382,7 +384,7 @@ void SetupServerArgs()
#endif
gArgs.AddArg("-prune=<n>", strprintf("Reduce storage requirements by enabling pruning (deleting) of old blocks. This allows the pruneblockchain RPC to be called to delete specific blocks, and enables automatic pruning of old blocks if a target size in MiB is provided. This mode is incompatible with -txindex and -rescan. "
"Warning: Reverting this setting requires re-downloading the entire blockchain. "
- "(default: 0 = disable pruning blocks, 1 = allow manual pruning via RPC, >%u = automatically prune block files to stay under the specified target size in MiB)", MIN_DISK_SPACE_FOR_BLOCK_FILES / 1024 / 1024), false, OptionsCategory::OPTIONS);
+ "(default: 0 = disable pruning blocks, 1 = allow manual pruning via RPC, >=%u = automatically prune block files to stay under the specified target size in MiB)", MIN_DISK_SPACE_FOR_BLOCK_FILES / 1024 / 1024), false, OptionsCategory::OPTIONS);
gArgs.AddArg("-reindex", "Rebuild chain state and block index from the blk*.dat files on disk", false, OptionsCategory::OPTIONS);
gArgs.AddArg("-reindex-chainstate", "Rebuild chain state from the currently indexed blocks", false, OptionsCategory::OPTIONS);
#ifndef WIN32
@@ -731,14 +733,11 @@ static bool AppInitServers()
RPCServer::OnStopped(&OnRPCStopped);
if (!InitHTTPServer())
return false;
- if (!StartRPC())
- return false;
+ StartRPC();
if (!StartHTTPRPC())
return false;
- if (gArgs.GetBoolArg("-rest", DEFAULT_REST_ENABLE) && !StartREST())
- return false;
- if (!StartHTTPServer())
- return false;
+ if (gArgs.GetBoolArg("-rest", DEFAULT_REST_ENABLE)) StartREST();
+ StartHTTPServer();
return true;
}
@@ -927,7 +926,7 @@ bool AppInitParameterInteraction()
// also see: InitParameterInteraction()
if (!fs::is_directory(GetBlocksDir(false))) {
- return InitError(strprintf(_("Specified blocks directory \"%s\" does not exist.\n"), gArgs.GetArg("-blocksdir", "").c_str()));
+ return InitError(strprintf(_("Specified blocks directory \"%s\" does not exist."), gArgs.GetArg("-blocksdir", "").c_str()));
}
// if using block pruning, then disallow txindex
@@ -1288,7 +1287,7 @@ bool AppInitMain()
*/
if (gArgs.GetBoolArg("-server", false))
{
- uiInterface.InitMessage.connect(SetRPCWarmupStatus);
+ uiInterface.InitMessage_connect(SetRPCWarmupStatus);
if (!AppInitServers())
return InitError(_("Unable to start HTTP server. See debug log for details."));
}
@@ -1645,13 +1644,13 @@ bool AppInitMain()
// Either install a handler to notify us when genesis activates, or set fHaveGenesis directly.
// No locking, as this happens before any background thread is started.
if (chainActive.Tip() == nullptr) {
- uiInterface.NotifyBlockTip.connect(BlockNotifyGenesisWait);
+ uiInterface.NotifyBlockTip_connect(BlockNotifyGenesisWait);
} else {
fHaveGenesis = true;
}
if (gArgs.IsArgSet("-blocknotify"))
- uiInterface.NotifyBlockTip.connect(BlockNotifyCallback);
+ uiInterface.NotifyBlockTip_connect(BlockNotifyCallback);
std::vector<fs::path> vImportFiles;
for (const std::string& strFile : gArgs.GetArgs("-loadblock")) {
@@ -1669,7 +1668,7 @@ bool AppInitMain()
while (!fHaveGenesis && !ShutdownRequested()) {
condvar_GenesisWait.wait_for(lock, std::chrono::milliseconds(500));
}
- uiInterface.NotifyBlockTip.disconnect(BlockNotifyGenesisWait);
+ uiInterface.NotifyBlockTip_disconnect(BlockNotifyGenesisWait);
}
if (ShutdownRequested()) {