abort.cpp raw

   1  // Copyright (c) 2023-present The Bitcoin Core developers
   2  // Distributed under the MIT software license, see the accompanying
   3  // file COPYING or http://www.opensource.org/licenses/mit-license.php.
   4  
   5  #include <node/abort.h>
   6  
   7  #include <logging.h>
   8  #include <node/interface_ui.h>
   9  #include <node/warnings.h>
  10  #include <util/fs.h>
  11  #include <util/signalinterrupt.h>
  12  #include <util/translation.h>
  13  
  14  #include <atomic>
  15  #include <cstdlib>
  16  
  17  namespace node {
  18  
  19  void AbortNode(const std::function<bool()>& shutdown_request, std::atomic<int>& exit_status, const bilingual_str& message, node::Warnings* warnings)
  20  {
  21      if (warnings) warnings->Set(Warning::FATAL_INTERNAL_ERROR, message);
  22      InitError(strprintf(_("A fatal internal error occurred, see %s for details: %s"), fs::PathToString(LogInstance().m_file_path.filename()), message));
  23      exit_status.store(EXIT_FAILURE);
  24      if (shutdown_request && !shutdown_request()) {
  25          LogError("Failed to send shutdown signal\n");
  26      };
  27  }
  28  } // namespace node
  29