mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-13 13:22:38 -03:00
e017a913d0
This adds a `-daemonwait` flag that does the same as `-daemon` except it, from a user perspective, backgrounds the process only after initialization is complete. This can be useful when the process launching bitcoind wants to guarantee that either the RPC server is running, or that initialization failed, before continuing. The exit code indicates the initialization result. This replaces the use of the libc function `daemon()` by a custom implementation which is inspired by the glibc implementation, but also creates a pipe from the child to the parent process for communication. An additional advantage of having our own `daemon()` implementation is that no MACOS-specific pragmas are needed anymore to silence a deprecation warning.
79 lines
2.9 KiB
C++
79 lines
2.9 KiB
C++
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
|
// Copyright (c) 2009-2020 The Bitcoin Core developers
|
|
// Distributed under the MIT software license, see the accompanying
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
#ifndef BITCOIN_INIT_H
|
|
#define BITCOIN_INIT_H
|
|
|
|
#include <memory>
|
|
#include <string>
|
|
|
|
//! Default value for -daemon option
|
|
static constexpr bool DEFAULT_DAEMON = false;
|
|
//! Default value for -daemonwait option
|
|
static constexpr bool DEFAULT_DAEMONWAIT = false;
|
|
|
|
class ArgsManager;
|
|
struct NodeContext;
|
|
namespace interfaces {
|
|
struct BlockAndHeaderTipInfo;
|
|
}
|
|
namespace boost {
|
|
class thread_group;
|
|
} // namespace boost
|
|
namespace util {
|
|
class Ref;
|
|
} // namespace util
|
|
|
|
/** Interrupt threads */
|
|
void Interrupt(NodeContext& node);
|
|
void Shutdown(NodeContext& node);
|
|
//!Initialize the logging infrastructure
|
|
void InitLogging(const ArgsManager& args);
|
|
//!Parameter interaction: change current parameters depending on various rules
|
|
void InitParameterInteraction(ArgsManager& args);
|
|
|
|
/** Initialize bitcoin core: Basic context setup.
|
|
* @note This can be done before daemonization. Do not call Shutdown() if this function fails.
|
|
* @pre Parameters should be parsed and config file should be read.
|
|
*/
|
|
bool AppInitBasicSetup(const ArgsManager& args);
|
|
/**
|
|
* Initialization: parameter interaction.
|
|
* @note This can be done before daemonization. Do not call Shutdown() if this function fails.
|
|
* @pre Parameters should be parsed and config file should be read, AppInitBasicSetup should have been called.
|
|
*/
|
|
bool AppInitParameterInteraction(const ArgsManager& args);
|
|
/**
|
|
* Initialization sanity checks: ecc init, sanity checks, dir lock.
|
|
* @note This can be done before daemonization. Do not call Shutdown() if this function fails.
|
|
* @pre Parameters should be parsed and config file should be read, AppInitParameterInteraction should have been called.
|
|
*/
|
|
bool AppInitSanityChecks();
|
|
/**
|
|
* Lock bitcoin core data directory.
|
|
* @note This should only be done after daemonization. Do not call Shutdown() if this function fails.
|
|
* @pre Parameters should be parsed and config file should be read, AppInitSanityChecks should have been called.
|
|
*/
|
|
bool AppInitLockDataDirectory();
|
|
/**
|
|
* Initialize node and wallet interface pointers. Has no prerequisites or side effects besides allocating memory.
|
|
*/
|
|
bool AppInitInterfaces(NodeContext& node);
|
|
/**
|
|
* Bitcoin core main initialization.
|
|
* @note This should only be done after daemonization. Call Shutdown() if this function fails.
|
|
* @pre Parameters should be parsed and config file should be read, AppInitLockDataDirectory should have been called.
|
|
*/
|
|
bool AppInitMain(const util::Ref& context, NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info = nullptr);
|
|
|
|
/**
|
|
* Register all arguments with the ArgsManager
|
|
*/
|
|
void SetupServerArgs(NodeContext& node);
|
|
|
|
/** Returns licensing information (for -version) */
|
|
std::string LicenseInfo();
|
|
|
|
#endif // BITCOIN_INIT_H
|