Break circular dependency: init -> * -> init by extracting shutdown.h
Most includers just wanted to react to pending shutdown. This isolates access to `fRequestShutdown` and limits access to the shutdown api functions, including the new `AbortShutdown` for setting it to `false`. Note I originally called `AbortShutdown` `CancelShutdown` but that name was already taken by winuser.h https://travis-ci.org/bitcoin/bitcoin/jobs/386913329 This change also triggered a build error in bench. Fixing it required moving LIBBITCOIN_SERVER after LIBBITCOIN_WALLET in bench_bench_bitcoin_LDADD To make server definitions in src/net.cpp available to wallet methods in src/wallet/wallet.cpp. Specifically, solving: libbitcoin_wallet.a(libbitcoin_wallet_a-wallet.o): In function `CWalletTx::RelayWalletTransaction(CConnman*)': wallet.cpp:(.text+0x3f0e): undefined reference to `CConnman::NodeFullyConnected(CNode const*)' collect2: error: ld returned 1 exit status https://travis-ci.org/bitcoin/bitcoin/jobs/392133581 Need for remaining init.h includes confirmed via a thorough search with a more specific regex: \bInterrupt\(\)|\bShutdown\(\)|\bInitLogging\(\)|\bInitParameterInteraction\(\)|\bAppInitBasicSetup\(\)|\bAppInitParameterInteraction\(\)|\bAppInitSanityChecks\(\)|\bAppInitLockDataDirectory\(\)|\bAppInitMain\(\)|\bSetupServerArgs\(\)|\bLicenseInfo\(\)|g_wallet_init_interface|init.h
This commit is contained in:
parent
e62fdfeeab
commit
1fabd59e7e
18 changed files with 70 additions and 44 deletions
|
@ -157,6 +157,7 @@ BITCOIN_CORE_H = \
|
|||
script/sigcache.h \
|
||||
script/sign.h \
|
||||
script/standard.h \
|
||||
shutdown.h \
|
||||
streams.h \
|
||||
support/allocators/secure.h \
|
||||
support/allocators/zeroafterfree.h \
|
||||
|
@ -237,6 +238,7 @@ libbitcoin_server_a_SOURCES = \
|
|||
rpc/server.cpp \
|
||||
rpc/util.cpp \
|
||||
script/sigcache.cpp \
|
||||
shutdown.cpp \
|
||||
timedata.cpp \
|
||||
torcontrol.cpp \
|
||||
txdb.cpp \
|
||||
|
|
|
@ -34,8 +34,8 @@ nodist_bench_bench_bitcoin_SOURCES = $(GENERATED_BENCH_FILES)
|
|||
bench_bench_bitcoin_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) $(EVENT_CLFAGS) $(EVENT_PTHREADS_CFLAGS) -I$(builddir)/bench/
|
||||
bench_bench_bitcoin_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS)
|
||||
bench_bench_bitcoin_LDADD = \
|
||||
$(LIBBITCOIN_SERVER) \
|
||||
$(LIBBITCOIN_WALLET) \
|
||||
$(LIBBITCOIN_SERVER) \
|
||||
$(LIBBITCOIN_COMMON) \
|
||||
$(LIBBITCOIN_UTIL) \
|
||||
$(LIBBITCOIN_CONSENSUS) \
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
||||
// Copyright (c) 2009-2017 The Bitcoin Core developers
|
||||
// Copyright (c) 2009-2018 The Bitcoin Core developers
|
||||
// Distributed under the MIT software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
|
@ -14,6 +14,7 @@
|
|||
#include <rpc/server.h>
|
||||
#include <init.h>
|
||||
#include <noui.h>
|
||||
#include <shutdown.h>
|
||||
#include <util.h>
|
||||
#include <httpserver.h>
|
||||
#include <httprpc.h>
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
#include <chainparams.h>
|
||||
#include <index/base.h>
|
||||
#include <init.h>
|
||||
#include <shutdown.h>
|
||||
#include <tinyformat.h>
|
||||
#include <ui_interface.h>
|
||||
#include <util.h>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
#include <index/txindex.h>
|
||||
#include <init.h>
|
||||
#include <shutdown.h>
|
||||
#include <ui_interface.h>
|
||||
#include <util.h>
|
||||
#include <validation.h>
|
||||
|
|
35
src/init.cpp
35
src/init.cpp
|
@ -1,5 +1,5 @@
|
|||
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
||||
// Copyright (c) 2009-2017 The Bitcoin Core developers
|
||||
// Copyright (c) 2009-2018 The Bitcoin Core developers
|
||||
// Distributed under the MIT software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
|
@ -35,6 +35,7 @@
|
|||
#include <script/standard.h>
|
||||
#include <script/sigcache.h>
|
||||
#include <scheduler.h>
|
||||
#include <shutdown.h>
|
||||
#include <timedata.h>
|
||||
#include <txdb.h>
|
||||
#include <txmempool.h>
|
||||
|
@ -126,7 +127,7 @@ static const char* FEE_ESTIMATES_FILENAME="fee_estimates.dat";
|
|||
// created by AppInit() or the Qt main() function.
|
||||
//
|
||||
// A clean exit happens when StartShutdown() or the SIGTERM
|
||||
// signal handler sets fRequestShutdown, which makes main thread's
|
||||
// signal handler sets ShutdownRequested(), which makes main thread's
|
||||
// WaitForShutdown() interrupts the thread group.
|
||||
// And then, WaitForShutdown() makes all other on-going threads
|
||||
// in the thread group join the main thread.
|
||||
|
@ -135,21 +136,10 @@ static const char* FEE_ESTIMATES_FILENAME="fee_estimates.dat";
|
|||
// threads have exited.
|
||||
//
|
||||
// Shutdown for Qt is very similar, only it uses a QTimer to detect
|
||||
// fRequestShutdown getting set, and then does the normal Qt
|
||||
// ShutdownRequested() getting set, and then does the normal Qt
|
||||
// shutdown thing.
|
||||
//
|
||||
|
||||
std::atomic<bool> fRequestShutdown(false);
|
||||
|
||||
void StartShutdown()
|
||||
{
|
||||
fRequestShutdown = true;
|
||||
}
|
||||
bool ShutdownRequested()
|
||||
{
|
||||
return fRequestShutdown;
|
||||
}
|
||||
|
||||
/**
|
||||
* This is a minimally invasive approach to shutdown on LevelDB read errors from the
|
||||
* chainstate, while keeping user interface out of the common library, which is shared
|
||||
|
@ -310,7 +300,7 @@ void Shutdown()
|
|||
#ifndef WIN32
|
||||
static void HandleSIGTERM(int)
|
||||
{
|
||||
fRequestShutdown = true;
|
||||
StartShutdown();
|
||||
}
|
||||
|
||||
static void HandleSIGHUP(int)
|
||||
|
@ -320,7 +310,7 @@ static void HandleSIGHUP(int)
|
|||
#else
|
||||
static BOOL WINAPI consoleCtrlHandler(DWORD dwCtrlType)
|
||||
{
|
||||
fRequestShutdown = true;
|
||||
StartShutdown();
|
||||
Sleep(INFINITE);
|
||||
return true;
|
||||
}
|
||||
|
@ -713,7 +703,7 @@ static void ThreadImport(std::vector<fs::path> vImportFiles)
|
|||
if (gArgs.GetArg("-persistmempool", DEFAULT_PERSIST_MEMPOOL)) {
|
||||
LoadMempool();
|
||||
}
|
||||
g_is_mempool_loaded = !fRequestShutdown;
|
||||
g_is_mempool_loaded = !ShutdownRequested();
|
||||
}
|
||||
|
||||
/** Sanity checks
|
||||
|
@ -1449,7 +1439,7 @@ bool AppInitMain()
|
|||
LogPrintf("* Using %.1fMiB for in-memory UTXO set (plus up to %.1fMiB of unused mempool space)\n", nCoinCacheUsage * (1.0 / 1024 / 1024), nMempoolSizeMax * (1.0 / 1024 / 1024));
|
||||
|
||||
bool fLoaded = false;
|
||||
while (!fLoaded && !fRequestShutdown) {
|
||||
while (!fLoaded && !ShutdownRequested()) {
|
||||
bool fReset = fReindex;
|
||||
std::string strLoadError;
|
||||
|
||||
|
@ -1476,7 +1466,7 @@ bool AppInitMain()
|
|||
CleanupBlockRevFiles();
|
||||
}
|
||||
|
||||
if (fRequestShutdown) break;
|
||||
if (ShutdownRequested()) break;
|
||||
|
||||
// LoadBlockIndex will load fHavePruned if we've ever removed a
|
||||
// block file from disk.
|
||||
|
@ -1583,7 +1573,7 @@ bool AppInitMain()
|
|||
fLoaded = true;
|
||||
} while(false);
|
||||
|
||||
if (!fLoaded && !fRequestShutdown) {
|
||||
if (!fLoaded && !ShutdownRequested()) {
|
||||
// first suggest a reindex
|
||||
if (!fReset) {
|
||||
bool fRet = uiInterface.ThreadSafeQuestion(
|
||||
|
@ -1592,7 +1582,7 @@ bool AppInitMain()
|
|||
"", CClientUIInterface::MSG_ERROR | CClientUIInterface::BTN_ABORT);
|
||||
if (fRet) {
|
||||
fReindex = true;
|
||||
fRequestShutdown = false;
|
||||
AbortShutdown();
|
||||
} else {
|
||||
LogPrintf("Aborted block database rebuild. Exiting.\n");
|
||||
return false;
|
||||
|
@ -1606,8 +1596,7 @@ bool AppInitMain()
|
|||
// As LoadBlockIndex can take several minutes, it's possible the user
|
||||
// requested to kill the GUI during the last operation. If so, exit.
|
||||
// As the program has not fully started yet, Shutdown() is possibly overkill.
|
||||
if (fRequestShutdown)
|
||||
{
|
||||
if (ShutdownRequested()) {
|
||||
LogPrintf("Shutdown requested. Exiting.\n");
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
||||
// Copyright (c) 2009-2017 The Bitcoin Core developers
|
||||
// Copyright (c) 2009-2018 The Bitcoin Core developers
|
||||
// Distributed under the MIT software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
|
@ -21,8 +21,6 @@ namespace boost
|
|||
class thread_group;
|
||||
} // namespace boost
|
||||
|
||||
void StartShutdown();
|
||||
bool ShutdownRequested();
|
||||
/** Interrupt threads */
|
||||
void Interrupt();
|
||||
void Shutdown();
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
#include <primitives/block.h>
|
||||
#include <rpc/server.h>
|
||||
#include <scheduler.h>
|
||||
#include <shutdown.h>
|
||||
#include <sync.h>
|
||||
#include <txmempool.h>
|
||||
#include <ui_interface.h>
|
||||
|
|
|
@ -257,7 +257,7 @@ private Q_SLOTS:
|
|||
/** Simply calls showNormalIfMinimized(true) for use in SLOT() macro */
|
||||
void toggleHidden();
|
||||
|
||||
/** called by a timer to check if fRequestShutdown has been set **/
|
||||
/** called by a timer to check if ShutdownRequested() has been set **/
|
||||
void detectShutdown();
|
||||
|
||||
/** Show progress dialog e.g. for verifychain */
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
#include <qt/winshutdownmonitor.h>
|
||||
|
||||
#if defined(Q_OS_WIN)
|
||||
#include <init.h>
|
||||
#include <shutdown.h>
|
||||
#include <util.h>
|
||||
|
||||
#include <windows.h>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
// Copyright (c) 2010 Satoshi Nakamoto
|
||||
// Copyright (c) 2009-2017 The Bitcoin Core developers
|
||||
// Copyright (c) 2009-2018 The Bitcoin Core developers
|
||||
// Distributed under the MIT software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
|
@ -10,7 +10,6 @@
|
|||
#include <consensus/params.h>
|
||||
#include <consensus/validation.h>
|
||||
#include <core_io.h>
|
||||
#include <init.h>
|
||||
#include <validation.h>
|
||||
#include <key_io.h>
|
||||
#include <miner.h>
|
||||
|
@ -20,6 +19,7 @@
|
|||
#include <rpc/blockchain.h>
|
||||
#include <rpc/mining.h>
|
||||
#include <rpc/server.h>
|
||||
#include <shutdown.h>
|
||||
#include <txmempool.h>
|
||||
#include <util.h>
|
||||
#include <utilstrencodings.h>
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
// Copyright (c) 2010 Satoshi Nakamoto
|
||||
// Copyright (c) 2009-2017 The Bitcoin Core developers
|
||||
// Copyright (c) 2009-2018 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 <rpc/server.h>
|
||||
|
||||
#include <fs.h>
|
||||
#include <init.h>
|
||||
#include <key_io.h>
|
||||
#include <random.h>
|
||||
#include <shutdown.h>
|
||||
#include <sync.h>
|
||||
#include <ui_interface.h>
|
||||
#include <util.h>
|
||||
|
|
23
src/shutdown.cpp
Normal file
23
src/shutdown.cpp
Normal file
|
@ -0,0 +1,23 @@
|
|||
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
||||
// Copyright (c) 2009-2018 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 <shutdown.h>
|
||||
|
||||
#include <atomic>
|
||||
|
||||
static std::atomic<bool> fRequestShutdown(false);
|
||||
|
||||
void StartShutdown()
|
||||
{
|
||||
fRequestShutdown = true;
|
||||
}
|
||||
void AbortShutdown()
|
||||
{
|
||||
fRequestShutdown = false;
|
||||
}
|
||||
bool ShutdownRequested()
|
||||
{
|
||||
return fRequestShutdown;
|
||||
}
|
13
src/shutdown.h
Normal file
13
src/shutdown.h
Normal file
|
@ -0,0 +1,13 @@
|
|||
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
||||
// Copyright (c) 2009-2018 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_SHUTDOWN_H
|
||||
#define BITCOIN_SHUTDOWN_H
|
||||
|
||||
void StartShutdown();
|
||||
void AbortShutdown();
|
||||
bool ShutdownRequested();
|
||||
|
||||
#endif
|
|
@ -1,5 +1,5 @@
|
|||
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
||||
// Copyright (c) 2009-2017 The Bitcoin Core developers
|
||||
// Copyright (c) 2009-2018 The Bitcoin Core developers
|
||||
// Distributed under the MIT software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
|
@ -9,10 +9,10 @@
|
|||
#include <hash.h>
|
||||
#include <random.h>
|
||||
#include <pow.h>
|
||||
#include <shutdown.h>
|
||||
#include <uint256.h>
|
||||
#include <util.h>
|
||||
#include <ui_interface.h>
|
||||
#include <init.h>
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
||||
// Copyright (c) 2009-2017 The Bitcoin Core developers
|
||||
// Copyright (c) 2009-2018 The Bitcoin Core developers
|
||||
// Distributed under the MIT software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
|
@ -17,7 +17,6 @@
|
|||
#include <cuckoocache.h>
|
||||
#include <hash.h>
|
||||
#include <index/txindex.h>
|
||||
#include <init.h>
|
||||
#include <policy/fees.h>
|
||||
#include <policy/policy.h>
|
||||
#include <policy/rbf.h>
|
||||
|
@ -29,6 +28,7 @@
|
|||
#include <script/script.h>
|
||||
#include <script/sigcache.h>
|
||||
#include <script/standard.h>
|
||||
#include <shutdown.h>
|
||||
#include <timedata.h>
|
||||
#include <tinyformat.h>
|
||||
#include <txdb.h>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
// Copyright (c) 2010 Satoshi Nakamoto
|
||||
// Copyright (c) 2009-2017 The Bitcoin Core developers
|
||||
// Copyright (c) 2009-2018 The Bitcoin Core developers
|
||||
// Distributed under the MIT software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
|
@ -20,6 +20,7 @@
|
|||
#include <rpc/server.h>
|
||||
#include <rpc/util.h>
|
||||
#include <script/sign.h>
|
||||
#include <shutdown.h>
|
||||
#include <timedata.h>
|
||||
#include <util.h>
|
||||
#include <utilmoneystr.h>
|
||||
|
@ -30,8 +31,6 @@
|
|||
#include <wallet/walletdb.h>
|
||||
#include <wallet/walletutil.h>
|
||||
|
||||
#include <init.h> // For StartShutdown
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#include <univalue.h>
|
||||
|
|
|
@ -11,7 +11,6 @@
|
|||
#include <consensus/consensus.h>
|
||||
#include <consensus/validation.h>
|
||||
#include <fs.h>
|
||||
#include <init.h>
|
||||
#include <key.h>
|
||||
#include <key_io.h>
|
||||
#include <keystore.h>
|
||||
|
@ -23,6 +22,7 @@
|
|||
#include <primitives/block.h>
|
||||
#include <primitives/transaction.h>
|
||||
#include <script/script.h>
|
||||
#include <shutdown.h>
|
||||
#include <timedata.h>
|
||||
#include <txmempool.h>
|
||||
#include <utilmoneystr.h>
|
||||
|
|
Loading…
Reference in a new issue