diff --git a/src/validation.cpp b/src/validation.cpp --- a/src/validation.cpp +++ b/src/validation.cpp @@ -2909,7 +2909,7 @@ connectTrace.GetBlocksConnected()) { assert(trace.pblock && trace.pindex); GetMainSignals().BlockConnected(trace.pblock, trace.pindex, - *trace.conflictedTxs); + trace.conflictedTxs); } } diff --git a/src/validationinterface.h b/src/validationinterface.h --- a/src/validationinterface.h +++ b/src/validationinterface.h @@ -104,12 +104,18 @@ /** * Notifies listeners of a block being connected. * Provides a vector of transactions evicted from the mempool as a result. + * + * Called on a background thread. */ virtual void BlockConnected(const std::shared_ptr &block, const CBlockIndex *pindex, const std::vector &txnConflicted) {} - /** Notifies listeners of a block being disconnected */ + /** + * Notifies listeners of a block being disconnected + * + * Called on a background thread. + */ virtual void BlockDisconnected(const std::shared_ptr &block) { } /** @@ -129,7 +135,11 @@ * Called on a background thread. */ virtual void ChainStateFlushed(const CBlockLocator &locator) {} - /** Notifies listeners about an inventory item being seen on the network. */ + /** + * Notifies listeners about an inventory item being seen on the network. + * + * Called on a background thread. + */ virtual void Inventory(const uint256 &hash) {} /** Tells listeners to broadcast their data. */ virtual void ResendWalletTransactions(int64_t nBestBlockTime, @@ -190,9 +200,10 @@ void UpdatedBlockTip(const CBlockIndex *, const CBlockIndex *, bool fInitialDownload); void TransactionAddedToMempool(const CTransactionRef &); - void BlockConnected(const std::shared_ptr &, - const CBlockIndex *pindex, - const std::vector &); + void + BlockConnected(const std::shared_ptr &, + const CBlockIndex *pindex, + const std::shared_ptr> &); void BlockDisconnected(const std::shared_ptr &); void ChainStateFlushed(const CBlockLocator &); void Inventory(const uint256 &); diff --git a/src/validationinterface.cpp b/src/validationinterface.cpp --- a/src/validationinterface.cpp +++ b/src/validationinterface.cpp @@ -182,26 +182,33 @@ } void CMainSignals::TransactionAddedToMempool(const CTransactionRef &ptx) { - m_internals->TransactionAddedToMempool(ptx); + m_internals->m_schedulerClient.AddToProcessQueue( + [ptx, this] { m_internals->TransactionAddedToMempool(ptx); }); } void CMainSignals::BlockConnected( const std::shared_ptr &pblock, const CBlockIndex *pindex, - const std::vector &vtxConflicted) { - m_internals->BlockConnected(pblock, pindex, vtxConflicted); + const std::shared_ptr> &pvtxConflicted) { + m_internals->m_schedulerClient.AddToProcessQueue( + [pblock, pindex, pvtxConflicted, this] { + m_internals->BlockConnected(pblock, pindex, *pvtxConflicted); + }); } void CMainSignals::BlockDisconnected( const std::shared_ptr &pblock) { - m_internals->BlockDisconnected(pblock); + m_internals->m_schedulerClient.AddToProcessQueue( + [pblock, this] { m_internals->BlockDisconnected(pblock); }); } void CMainSignals::ChainStateFlushed(const CBlockLocator &locator) { - m_internals->ChainStateFlushed(locator); + m_internals->m_schedulerClient.AddToProcessQueue( + [locator, this] { m_internals->ChainStateFlushed(locator); }); } void CMainSignals::Inventory(const uint256 &hash) { - m_internals->Inventory(hash); + m_internals->m_schedulerClient.AddToProcessQueue( + [hash, this] { m_internals->Inventory(hash); }); } void CMainSignals::Broadcast(int64_t nBestBlockTime, CConnman *connman) {