55
66#include < validationinterface.h>
77
8- #include < attributes.h>
98#include < chain.h>
109#include < consensus/validation.h>
1110#include < kernel/chain.h>
1211#include < kernel/mempool_entry.h>
1312#include < logging.h>
1413#include < primitives/block.h>
1514#include < primitives/transaction.h>
16- #include < scheduler.h>
15+ #include < util/check.h>
16+ #include < util/task_runner.h>
1717
1818#include < future>
1919#include < unordered_map>
@@ -42,12 +42,10 @@ class ValidationSignalsImpl
4242 std::unordered_map<CValidationInterface*, std::list<ListEntry>::iterator> m_map GUARDED_BY (m_mutex);
4343
4444public:
45- // We are not allowed to assume the scheduler only runs in one thread,
46- // but must ensure all callbacks happen in-order, so we end up creating
47- // our own queue here :(
48- SerialTaskRunner m_task_runner;
45+ std::unique_ptr<util::TaskRunnerInterface> m_task_runner;
4946
50- explicit ValidationSignalsImpl (CScheduler& scheduler LIFETIMEBOUND) : m_task_runner(scheduler) {}
47+ explicit ValidationSignalsImpl (std::unique_ptr<util::TaskRunnerInterface> task_runner)
48+ : m_task_runner{std::move (Assert (task_runner))} {}
5149
5250 void Register (std::shared_ptr<CValidationInterface> callbacks) EXCLUSIVE_LOCKS_REQUIRED(!m_mutex)
5351 {
@@ -94,19 +92,19 @@ class ValidationSignalsImpl
9492 }
9593};
9694
97- ValidationSignals::ValidationSignals (CScheduler& scheduler )
98- : m_internals{std::make_unique<ValidationSignalsImpl>(scheduler )} {}
95+ ValidationSignals::ValidationSignals (std::unique_ptr<util::TaskRunnerInterface> task_runner )
96+ : m_internals{std::make_unique<ValidationSignalsImpl>(std::move (task_runner) )} {}
9997
10098ValidationSignals::~ValidationSignals () {}
10199
102100void ValidationSignals::FlushBackgroundCallbacks ()
103101{
104- m_internals->m_task_runner . flush ();
102+ m_internals->m_task_runner -> flush ();
105103}
106104
107105size_t ValidationSignals::CallbacksPending ()
108106{
109- return m_internals->m_task_runner . size ();
107+ return m_internals->m_task_runner -> size ();
110108}
111109
112110void ValidationSignals::RegisterSharedValidationInterface (std::shared_ptr<CValidationInterface> callbacks)
@@ -140,7 +138,7 @@ void ValidationSignals::UnregisterAllValidationInterfaces()
140138
141139void ValidationSignals::CallFunctionInValidationInterfaceQueue (std::function<void ()> func)
142140{
143- m_internals->m_task_runner . insert (std::move (func));
141+ m_internals->m_task_runner -> insert (std::move (func));
144142}
145143
146144void ValidationSignals::SyncWithValidationInterfaceQueue ()
@@ -162,7 +160,7 @@ void ValidationSignals::SyncWithValidationInterfaceQueue()
162160 do { \
163161 auto local_name = (name); \
164162 LOG_EVENT (" Enqueuing " fmt, local_name, __VA_ARGS__); \
165- m_internals->m_task_runner . insert ([=] { \
163+ m_internals->m_task_runner -> insert ([=] { \
166164 LOG_EVENT (fmt, local_name, __VA_ARGS__); \
167165 event (); \
168166 }); \
0 commit comments