mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-06-04 18:22:57 +02:00
Merge bitcoin/bitcoin#28960: kernel: Remove dependency on CScheduler
d5228efb53kernel: Remove dependency on CScheduler (TheCharlatan)06069b3913scripted-diff: Rename MainSignals to ValidationSignals (TheCharlatan)0d6d2b650dscripted-diff: Rename SingleThreadedSchedulerClient to SerialTaskRunner (TheCharlatan)4abde2c4e3[refactor] Make MainSignals RAII styled (TheCharlatan)84f5c135b8refactor: De-globalize g_signals (TheCharlatan)473dd4b97a[refactor] Prepare for g_signals de-globalization (TheCharlatan)3fba3d5dee[refactor] Make signals optional in mempool and chainman (TheCharlatan) Pull request description: By defining a virtual interface class for the scheduler client, users of the kernel can now define their own event consuming infrastructure, without having to spawn threads or rely on the scheduler design. Removing `CScheduler` also allows removing the thread and exception modules from the kernel library. To make the `CMainSignals` class easier to use from a kernel library perspective, remove its global instantiation and adopt RAII practices. Renames `CMainSignals` to `ValidationSignals`, which more accurately describes its purpose and scope. Also make the `ValidationSignals` in the `ChainstateManager` and CTxMemPool` optional. This could be useful in the future for using or testing these classes without having to instantiate any form of signal handling. --- This PR is part of the [libbitcoinkernel project](https://github.com/bitcoin/bitcoin/issues/27587). It improves the kernel API and removes two modules from the kernel library. ACKs for top commit: maflcko: re-ACKd5228efb53🌄 ryanofsky: Code review ACKd5228efb53. Just comment change since last review. vasild: ACKd5228efb53furszy: diff ACKd5228efTree-SHA512: e93a5f10eb6182effb84bb981859a7ce750e466efd8171045d8d9e7fe46e4065631d9f6f533c5967c4d34c9bb7d7a67e9f4593bd4c5b30cd7b3bbad7be7b331b
This commit is contained in:
52
src/util/task_runner.h
Normal file
52
src/util/task_runner.h
Normal file
@@ -0,0 +1,52 @@
|
||||
// Copyright (c) 2024-present The Bitcoin Core developers
|
||||
// Distributed under the MIT software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
#ifndef BITCOIN_UTIL_TASK_RUNNER_H
|
||||
#define BITCOIN_UTIL_TASK_RUNNER_H
|
||||
|
||||
#include <cstddef>
|
||||
#include <functional>
|
||||
|
||||
namespace util {
|
||||
|
||||
/** @file
|
||||
* This header provides an interface and simple implementation for a task
|
||||
* runner. Another threaded, serial implementation using a queue is available in
|
||||
* the scheduler module's SerialTaskRunner.
|
||||
*/
|
||||
|
||||
class TaskRunnerInterface
|
||||
{
|
||||
public:
|
||||
virtual ~TaskRunnerInterface() {}
|
||||
|
||||
/**
|
||||
* The callback can either be queued for later/asynchronous/threaded
|
||||
* processing, or be executed immediately for synchronous processing.
|
||||
*/
|
||||
|
||||
virtual void insert(std::function<void()> func) = 0;
|
||||
|
||||
/**
|
||||
* Forces the processing of all pending events.
|
||||
*/
|
||||
virtual void flush() = 0;
|
||||
|
||||
/**
|
||||
* Returns the number of currently pending events.
|
||||
*/
|
||||
virtual size_t size() = 0;
|
||||
};
|
||||
|
||||
class ImmediateTaskRunner : public TaskRunnerInterface
|
||||
{
|
||||
public:
|
||||
void insert(std::function<void()> func) override { func(); }
|
||||
void flush() override {}
|
||||
size_t size() override { return 0; }
|
||||
};
|
||||
|
||||
} // namespace util
|
||||
|
||||
#endif // BITCOIN_UTIL_TASK_RUNNER_H
|
||||
Reference in New Issue
Block a user