mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-28 20:17:29 -03:00
ab31b9d6fe
Currently it's possible for ReleaseWallet to delete the CWallet pointer while it is processing BlockConnected, etc chain notifications. To fix this, unregister from notifications earlier in UnloadWallet instead of ReleaseWallet, and use a new RegisterSharedValidationInterface function to prevent the CValidationInterface shared_ptr from being deleted until the last notification is actually finished.
29 lines
1,012 B
C++
29 lines
1,012 B
C++
// Copyright (c) 2016-2019 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_WALLET_TEST_WALLET_TEST_FIXTURE_H
|
|
#define BITCOIN_WALLET_TEST_WALLET_TEST_FIXTURE_H
|
|
|
|
#include <test/util/setup_common.h>
|
|
|
|
#include <interfaces/chain.h>
|
|
#include <interfaces/wallet.h>
|
|
#include <node/context.h>
|
|
#include <wallet/wallet.h>
|
|
|
|
#include <memory>
|
|
|
|
/** Testing setup and teardown for wallet.
|
|
*/
|
|
struct WalletTestingSetup: public TestingSetup {
|
|
explicit WalletTestingSetup(const std::string& chainName = CBaseChainParams::MAIN);
|
|
|
|
NodeContext m_node;
|
|
std::unique_ptr<interfaces::Chain> m_chain = interfaces::MakeChain(m_node);
|
|
std::unique_ptr<interfaces::ChainClient> m_chain_client = interfaces::MakeWalletClient(*m_chain, {});
|
|
CWallet m_wallet;
|
|
std::unique_ptr<interfaces::Handler> m_chain_notifications_handler;
|
|
};
|
|
|
|
#endif // BITCOIN_WALLET_TEST_WALLET_TEST_FIXTURE_H
|