mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-02-09 08:43:04 +01:00
FatalError replaces what previously was the AbortNode function in shutdown.cpp. This commit is part of the libbitcoinkernel project and further removes the shutdown's and, more generally, the kernel library's dependency on interface_ui with a kernel notification method. By removing interface_ui from the kernel library, its dependency on boost is reduced to just boost::multi_index. At the same time it also takes a step towards de-globalising the interrupt infrastructure. Co-authored-by: Russell Yanofsky <russ@yanofsky.org> Co-authored-by: TheCharlatan <seb.kung@gmail.com>
91 lines
2.5 KiB
C++
91 lines
2.5 KiB
C++
// Copyright (c) 2023 The Bitcoin Core developers
|
|
// Distributed under the MIT software license, see the accompanying
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
#include <node/kernel_notifications.h>
|
|
|
|
#if defined(HAVE_CONFIG_H)
|
|
#include <config/bitcoin-config.h>
|
|
#endif
|
|
|
|
#include <common/args.h>
|
|
#include <common/system.h>
|
|
#include <kernel/context.h>
|
|
#include <logging.h>
|
|
#include <node/abort.h>
|
|
#include <node/interface_ui.h>
|
|
#include <shutdown.h>
|
|
#include <util/check.h>
|
|
#include <util/strencodings.h>
|
|
#include <util/string.h>
|
|
#include <util/translation.h>
|
|
#include <warnings.h>
|
|
|
|
#include <cstdint>
|
|
#include <string>
|
|
#include <thread>
|
|
|
|
static void AlertNotify(const std::string& strMessage)
|
|
{
|
|
uiInterface.NotifyAlertChanged();
|
|
#if HAVE_SYSTEM
|
|
std::string strCmd = gArgs.GetArg("-alertnotify", "");
|
|
if (strCmd.empty()) return;
|
|
|
|
// Alert text should be plain ascii coming from a trusted source, but to
|
|
// be safe we first strip anything not in safeChars, then add single quotes around
|
|
// the whole string before passing it to the shell:
|
|
std::string singleQuote("'");
|
|
std::string safeStatus = SanitizeString(strMessage);
|
|
safeStatus = singleQuote+safeStatus+singleQuote;
|
|
ReplaceAll(strCmd, "%s", safeStatus);
|
|
|
|
std::thread t(runCommand, strCmd);
|
|
t.detach(); // thread runs free
|
|
#endif
|
|
}
|
|
|
|
static void DoWarning(const bilingual_str& warning)
|
|
{
|
|
static bool fWarned = false;
|
|
SetMiscWarning(warning);
|
|
if (!fWarned) {
|
|
AlertNotify(warning.original);
|
|
fWarned = true;
|
|
}
|
|
}
|
|
|
|
namespace node {
|
|
|
|
void KernelNotifications::blockTip(SynchronizationState state, CBlockIndex& index)
|
|
{
|
|
uiInterface.NotifyBlockTip(state, &index);
|
|
}
|
|
|
|
void KernelNotifications::headerTip(SynchronizationState state, int64_t height, int64_t timestamp, bool presync)
|
|
{
|
|
uiInterface.NotifyHeaderTip(state, height, timestamp, presync);
|
|
}
|
|
|
|
void KernelNotifications::progress(const bilingual_str& title, int progress_percent, bool resume_possible)
|
|
{
|
|
uiInterface.ShowProgress(title.translated, progress_percent, resume_possible);
|
|
}
|
|
|
|
void KernelNotifications::warning(const bilingual_str& warning)
|
|
{
|
|
DoWarning(warning);
|
|
}
|
|
|
|
void KernelNotifications::flushError(const std::string& debug_message)
|
|
{
|
|
AbortNode(m_exit_status, debug_message);
|
|
}
|
|
|
|
void KernelNotifications::fatalError(const std::string& debug_message, const bilingual_str& user_message)
|
|
{
|
|
node::AbortNode(m_exit_status, debug_message, user_message, m_shutdown_on_fatal_error);
|
|
}
|
|
|
|
} // namespace node
|