diff --git a/src/init.cpp b/src/init.cpp index 8fa28bdc9731d..9c5ba5316508e 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -231,7 +231,10 @@ void PrepareShutdown() #endif StopMapPort(); - UnregisterValidationInterface(peerLogic.get()); + // Because these depend on each-other, we make sure that neither can be + // using the other before destroying them. + if (peerLogic) UnregisterValidationInterface(peerLogic.get()); + if (g_connman) g_connman->Stop(); peerLogic.reset(); g_connman.reset(); diff --git a/src/validationinterface.cpp b/src/validationinterface.cpp index a2e4eda28b153..6f575a6b2d700 100644 --- a/src/validationinterface.cpp +++ b/src/validationinterface.cpp @@ -57,7 +57,9 @@ void CMainSignals::UnregisterBackgroundSignalScheduler() { } void CMainSignals::FlushBackgroundCallbacks() { - m_internals->m_schedulerClient.EmptyQueue(); + if (m_internals) { + m_internals->m_schedulerClient.EmptyQueue(); + } } CMainSignals& GetMainSignals() @@ -93,6 +95,9 @@ void UnregisterValidationInterface(CValidationInterface* pwalletIn) void UnregisterAllValidationInterfaces() { + if (!g_signals.m_internals) { + return; + } g_signals.m_internals->BlockFound.disconnect_all_slots(); g_signals.m_internals->BlockChecked.disconnect_all_slots(); g_signals.m_internals->Broadcast.disconnect_all_slots();