aboutsummaryrefslogtreecommitdiff
path: root/src/init.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/init.cpp')
-rw-r--r--src/init.cpp27
1 files changed, 14 insertions, 13 deletions
diff --git a/src/init.cpp b/src/init.cpp
index 21445929d..2131a6adc 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");
@@ -734,8 +736,7 @@ static bool AppInitServers()
StartRPC();
if (!StartHTTPRPC())
return false;
- if (gArgs.GetBoolArg("-rest", DEFAULT_REST_ENABLE) && !StartREST())
- return false;
+ if (gArgs.GetBoolArg("-rest", DEFAULT_REST_ENABLE)) StartREST();
StartHTTPServer();
return true;
}
@@ -1286,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."));
}
@@ -1643,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")) {
@@ -1667,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()) {