Add CallFunctionInQueue to wait on validation interface queue drain
This commit is contained in:
parent
2b4b34503f
commit
0b2f42d737
2 changed files with 18 additions and 2 deletions
|
@ -104,6 +104,10 @@ void UnregisterAllValidationInterfaces() {
|
|||
g_signals.m_internals->NewPoWValidBlock.disconnect_all_slots();
|
||||
}
|
||||
|
||||
void CallFunctionInValidationInterfaceQueue(std::function<void ()> func) {
|
||||
g_signals.m_internals->m_schedulerClient.AddToProcessQueue(std::move(func));
|
||||
}
|
||||
|
||||
void CMainSignals::MempoolEntryRemoved(CTransactionRef ptx, MemPoolRemovalReason reason) {
|
||||
if (reason != MemPoolRemovalReason::BLOCK && reason != MemPoolRemovalReason::CONFLICT) {
|
||||
m_internals->m_schedulerClient.AddToProcessQueue([ptx, this] {
|
||||
|
|
|
@ -6,10 +6,11 @@
|
|||
#ifndef BITCOIN_VALIDATIONINTERFACE_H
|
||||
#define BITCOIN_VALIDATIONINTERFACE_H
|
||||
|
||||
#include <memory>
|
||||
|
||||
#include "primitives/transaction.h" // CTransaction(Ref)
|
||||
|
||||
#include <functional>
|
||||
#include <memory>
|
||||
|
||||
class CBlock;
|
||||
class CBlockIndex;
|
||||
struct CBlockLocator;
|
||||
|
@ -31,6 +32,16 @@ void RegisterValidationInterface(CValidationInterface* pwalletIn);
|
|||
void UnregisterValidationInterface(CValidationInterface* pwalletIn);
|
||||
/** Unregister all wallets from core */
|
||||
void UnregisterAllValidationInterfaces();
|
||||
/**
|
||||
* Pushes a function to callback onto the notification queue, guaranteeing any
|
||||
* callbacks generated prior to now are finished when the function is called.
|
||||
*
|
||||
* Be very careful blocking on func to be called if any locks are held -
|
||||
* validation interface clients may not be able to make progress as they often
|
||||
* wait for things like cs_main, so blocking until func is called with cs_main
|
||||
* will result in a deadlock (that DEBUG_LOCKORDER will miss).
|
||||
*/
|
||||
void CallFunctionInValidationInterfaceQueue(std::function<void ()> func);
|
||||
|
||||
class CValidationInterface {
|
||||
protected:
|
||||
|
@ -86,6 +97,7 @@ private:
|
|||
friend void ::RegisterValidationInterface(CValidationInterface*);
|
||||
friend void ::UnregisterValidationInterface(CValidationInterface*);
|
||||
friend void ::UnregisterAllValidationInterfaces();
|
||||
friend void ::CallFunctionInValidationInterfaceQueue(std::function<void ()> func);
|
||||
|
||||
void MempoolEntryRemoved(CTransactionRef tx, MemPoolRemovalReason reason);
|
||||
|
||||
|
|
Loading…
Reference in a new issue