Permalink
Browse files
Give CMainSignals a reference to the global scheduler
...so that it can run some signals in the background later
- Loading branch information...
|
|
@@ -251,6 +251,7 @@ void Shutdown() |
|
|
}
|
|
|
#endif
|
|
|
UnregisterAllValidationInterfaces();
|
|
|
+ GetMainSignals().UnregisterBackgroundSignalScheduler();
|
|
|
#ifdef ENABLE_WALLET
|
|
|
for (CWalletRef pwallet : vpwallets) {
|
|
|
delete pwallet;
|
|
|
@@ -1203,6 +1204,8 @@ bool AppInitMain(boost::thread_group& threadGroup, CScheduler& scheduler) |
|
|
CScheduler::Function serviceLoop = boost::bind(&CScheduler::serviceQueue, &scheduler);
|
|
|
threadGroup.create_thread(boost::bind(&TraceThread<CScheduler::Function>, "scheduler", serviceLoop));
|
|
|
|
|
|
+ GetMainSignals().RegisterBackgroundSignalScheduler(scheduler);
|
|
|
+
|
|
|
/* Start the RPC server already. It will be started in "warmup" mode
|
|
|
* and not really process calls already (but it will signify connections
|
|
|
* that the server is there and will be ready later). Warmup mode will
|
|
|
|
|
|
@@ -62,6 +62,12 @@ TestingSetup::TestingSetup(const std::string& chainName) : BasicTestingSetup(cha |
|
|
pathTemp = GetTempPath() / strprintf("test_bitcoin_%lu_%i", (unsigned long)GetTime(), (int)(InsecureRandRange(100000)));
|
|
|
fs::create_directories(pathTemp);
|
|
|
ForceSetArg("-datadir", pathTemp.string());
|
|
|
+
|
|
|
+ // Note that because we don't bother running a scheduler thread here,
|
|
|
+ // callbacks via CValidationInterface are unreliable, but that's OK,
|
|
|
+ // our unit tests aren't testing multiple parts of the code at once.
|
|
|
+ GetMainSignals().RegisterBackgroundSignalScheduler(scheduler);
|
|
|
+
|
|
|
mempool.setSanityCheck(1.0);
|
|
|
pblocktree = new CBlockTreeDB(1 << 20, true);
|
|
|
pcoinsdbview = new CCoinsViewDB(1 << 23, true);
|
|
|
@@ -88,6 +94,7 @@ TestingSetup::~TestingSetup() |
|
|
UnregisterNodeSignals(GetNodeSignals());
|
|
|
threadGroup.interrupt_all();
|
|
|
threadGroup.join_all();
|
|
|
+ GetMainSignals().UnregisterBackgroundSignalScheduler();
|
|
|
UnloadBlockIndex();
|
|
|
delete pcoinsTip;
|
|
|
delete pcoinsdbview;
|
|
|
|
|
|
@@ -10,6 +10,7 @@ |
|
|
#include "key.h"
|
|
|
#include "pubkey.h"
|
|
|
#include "random.h"
|
|
|
+#include "scheduler.h"
|
|
|
#include "txdb.h"
|
|
|
#include "txmempool.h"
|
|
|
|
|
|
@@ -53,6 +54,7 @@ struct TestingSetup: public BasicTestingSetup { |
|
|
fs::path pathTemp;
|
|
|
boost::thread_group threadGroup;
|
|
|
CConnman* connman;
|
|
|
+ CScheduler scheduler;
|
|
|
|
|
|
TestingSetup(const std::string& chainName = CBaseChainParams::MAIN);
|
|
|
~TestingSetup();
|
|
|
|
|
|
@@ -4,6 +4,8 @@ |
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
|
|
#include "validationinterface.h"
|
|
|
+#include "init.h"
|
|
|
+#include "scheduler.h"
|
|
|
|
|
|
#include <boost/signals2/signal.hpp>
|
|
|
|
|
|
@@ -17,6 +19,8 @@ struct MainSignalsInstance { |
|
|
boost::signals2::signal<void (int64_t nBestBlockTime, CConnman* connman)> Broadcast;
|
|
|
boost::signals2::signal<void (const CBlock&, const CValidationState&)> BlockChecked;
|
|
|
boost::signals2::signal<void (const CBlockIndex *, const std::shared_ptr<const CBlock>&)> NewPoWValidBlock;
|
|
|
+
|
|
|
+ CScheduler *m_scheduler = NULL;
|
|
|
};
|
|
|
|
|
|
static CMainSignals g_signals;
|
|
|
@@ -25,6 +29,15 @@ CMainSignals::CMainSignals() { |
|
|
m_internals.reset(new MainSignalsInstance());
|
|
|
}
|
|
|
|
|
|
+void CMainSignals::RegisterBackgroundSignalScheduler(CScheduler& scheduler) {
|
|
|
+ assert(!m_internals->m_scheduler);
|
|
|
+ m_internals->m_scheduler = &scheduler;
|
|
|
+}
|
|
|
+
|
|
|
+void CMainSignals::UnregisterBackgroundSignalScheduler() {
|
|
|
+ m_internals->m_scheduler = NULL;
|
|
|
+}
|
|
|
+
|
|
|
CMainSignals& GetMainSignals()
|
|
|
{
|
|
|
return g_signals;
|
|
|
|
|
|
@@ -19,6 +19,7 @@ class CReserveScript; |
|
|
class CValidationInterface;
|
|
|
class CValidationState;
|
|
|
class uint256;
|
|
|
+class CScheduler;
|
|
|
|
|
|
// These functions dispatch to one or all registered wallets
|
|
|
|
|
|
@@ -72,9 +73,15 @@ class CMainSignals { |
|
|
friend void ::RegisterValidationInterface(CValidationInterface*);
|
|
|
friend void ::UnregisterValidationInterface(CValidationInterface*);
|
|
|
friend void ::UnregisterAllValidationInterfaces();
|
|
|
+
|
|
|
public:
|
|
|
CMainSignals();
|
|
|
|
|
|
+ /** Register a CScheduler to give callbacks which should run in the background (may only be called once) */
|
|
|
+ void RegisterBackgroundSignalScheduler(CScheduler& scheduler);
|
|
|
+ /** Unregister a CScheduler to give callbacks which should run in the background - these callbacks will now be dropped! */
|
|
|
+ void UnregisterBackgroundSignalScheduler();
|
|
|
+
|
|
|
void UpdatedBlockTip(const CBlockIndex *, const CBlockIndex *, bool fInitialDownload);
|
|
|
void TransactionAddedToMempool(const CTransactionRef &);
|
|
|
void BlockConnected(const std::shared_ptr<const CBlock> &, const CBlockIndex *pindex, const std::vector<CTransactionRef> &);
|
|
|
|
0 comments on commit
cda1429