mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-06-10 14:48:46 +02:00
init: Initialize globals with kernel::Context's life
...instead of explicitly calling init::{Set,Unset}Globals.
Cool thing about this is that in both the testing and bitcoin-chainstate
codepaths, we no longer need to explicitly unset globals. The
kernel::Context goes out of scope and the globals are unset
"automatically".
Also construct kernel::Context outside of AppInitSanityChecks()
This commit is contained in:
33
src/kernel/context.cpp
Normal file
33
src/kernel/context.cpp
Normal file
@@ -0,0 +1,33 @@
|
||||
// Copyright (c) 2022 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 <kernel/context.h>
|
||||
|
||||
#include <crypto/sha256.h>
|
||||
#include <key.h>
|
||||
#include <logging.h>
|
||||
#include <pubkey.h>
|
||||
#include <random.h>
|
||||
|
||||
#include <string>
|
||||
|
||||
|
||||
namespace kernel {
|
||||
|
||||
Context::Context()
|
||||
{
|
||||
std::string sha256_algo = SHA256AutoDetect();
|
||||
LogPrintf("Using the '%s' SHA256 implementation\n", sha256_algo);
|
||||
RandomInit();
|
||||
ECC_Start();
|
||||
ecc_verify_handle.reset(new ECCVerifyHandle());
|
||||
}
|
||||
|
||||
Context::~Context()
|
||||
{
|
||||
ecc_verify_handle.reset();
|
||||
ECC_Stop();
|
||||
}
|
||||
|
||||
} // namespace kernel
|
||||
@@ -5,6 +5,10 @@
|
||||
#ifndef BITCOIN_KERNEL_CONTEXT_H
|
||||
#define BITCOIN_KERNEL_CONTEXT_H
|
||||
|
||||
#include <memory>
|
||||
|
||||
class ECCVerifyHandle;
|
||||
|
||||
namespace kernel {
|
||||
//! Context struct holding the kernel library's logically global state, and
|
||||
//! passed to external libbitcoin_kernel functions which need access to this
|
||||
@@ -14,6 +18,13 @@ namespace kernel {
|
||||
//! State stored directly in this struct should be simple. More complex state
|
||||
//! should be stored to std::unique_ptr members pointing to opaque types.
|
||||
struct Context {
|
||||
std::unique_ptr<ECCVerifyHandle> ecc_verify_handle;
|
||||
|
||||
//! Declare default constructor and destructor that are not inline, so code
|
||||
//! instantiating the kernel::Context struct doesn't need to #include class
|
||||
//! definitions for all the unique_ptr members.
|
||||
Context();
|
||||
~Context();
|
||||
};
|
||||
} // namespace kernel
|
||||
|
||||
|
||||
Reference in New Issue
Block a user