Changeset View
Changeset View
Standalone View
Standalone View
src/validationinterface.cpp
// Copyright (c) 2009-2010 Satoshi Nakamoto | // Copyright (c) 2009-2010 Satoshi Nakamoto | ||||
// Copyright (c) 2009-2016 The Bitcoin Core developers | // Copyright (c) 2009-2016 The Bitcoin Core developers | ||||
// Distributed under the MIT software license, see the accompanying | // Distributed under the MIT software license, see the accompanying | ||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php. | // file COPYING or http://www.opensource.org/licenses/mit-license.php. | ||||
#include "validationinterface.h" | #include "validationinterface.h" | ||||
#include "init.h" | #include "init.h" | ||||
#include "scheduler.h" | #include "scheduler.h" | ||||
#include "sync.h" | #include "sync.h" | ||||
#include "util.h" | #include "util.h" | ||||
#include "validation.h" | |||||
#include <atomic> | #include <atomic> | ||||
#include <future> | |||||
#include <list> | #include <list> | ||||
#include <boost/signals2/signal.hpp> | #include <boost/signals2/signal.hpp> | ||||
struct MainSignalsInstance { | struct MainSignalsInstance { | ||||
boost::signals2::signal<void(const CBlockIndex *, const CBlockIndex *, | boost::signals2::signal<void(const CBlockIndex *, const CBlockIndex *, | ||||
bool fInitialDownload)> | bool fInitialDownload)> | ||||
UpdatedBlockTip; | UpdatedBlockTip; | ||||
▲ Show 20 Lines • Show All 96 Lines • ▼ Show 20 Lines | void UnregisterAllValidationInterfaces() { | ||||
g_signals.m_internals->UpdatedBlockTip.disconnect_all_slots(); | g_signals.m_internals->UpdatedBlockTip.disconnect_all_slots(); | ||||
g_signals.m_internals->NewPoWValidBlock.disconnect_all_slots(); | g_signals.m_internals->NewPoWValidBlock.disconnect_all_slots(); | ||||
} | } | ||||
void CallFunctionInValidationInterfaceQueue(std::function<void()> func) { | void CallFunctionInValidationInterfaceQueue(std::function<void()> func) { | ||||
g_signals.m_internals->m_schedulerClient.AddToProcessQueue(std::move(func)); | g_signals.m_internals->m_schedulerClient.AddToProcessQueue(std::move(func)); | ||||
} | } | ||||
void SyncWithValidationInterfaceQueue() { | |||||
AssertLockNotHeld(cs_main); | |||||
// Block until the validation queue drains | |||||
std::promise<void> promise; | |||||
CallFunctionInValidationInterfaceQueue([&promise] { promise.set_value(); }); | |||||
promise.get_future().wait(); | |||||
} | |||||
void CMainSignals::UpdatedBlockTip(const CBlockIndex *pindexNew, | void CMainSignals::UpdatedBlockTip(const CBlockIndex *pindexNew, | ||||
const CBlockIndex *pindexFork, | const CBlockIndex *pindexFork, | ||||
bool fInitialDownload) { | bool fInitialDownload) { | ||||
m_internals->UpdatedBlockTip(pindexNew, pindexFork, fInitialDownload); | m_internals->UpdatedBlockTip(pindexNew, pindexFork, fInitialDownload); | ||||
} | } | ||||
void CMainSignals::TransactionAddedToMempool(const CTransactionRef &ptx) { | void CMainSignals::TransactionAddedToMempool(const CTransactionRef &ptx) { | ||||
m_internals->TransactionAddedToMempool(ptx); | m_internals->TransactionAddedToMempool(ptx); | ||||
Show All 34 Lines |