mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-04-11 16:17:54 +02:00
242b0ebb5cbtcsignals: use a single shared_ptr for liveness and callback (Cory Fields)b12f43a0a8signals: remove boost::signals2 from depends and vcpkg (Cory Fields)a4b1607983signals: remove boost::signals2 mentions in linters and docs (Cory Fields)375397ebd9signals: remove boost includes where possible (Cory Fields)091736a153signals: re-add forward-declares to interface headers (Cory Fields)9958f4fe49Revert "signals: Temporarily add boost headers to bitcoind and bitcoin-node builds" (Cory Fields)34eabd77a2signals: remove boost compatibility guards (Cory Fields)e60a0b9a22signals: Add a simplified boost-compatible implementation (Cory Fields)63c68e2a3fsignals: add signals tests (Cory Fields)edc2978058signals: use an alias for the boost::signals2 namespace (Cory Fields)9ade3929aasignals: remove forward-declare for signals (Cory Fields)037e58b57bsignals: use forwarding header for boost signals (Cory Fields)2150153f37signals: Temporarily add boost headers to bitcoind and bitcoin-node builds (Cory Fields)fd5e9d9904signals: Use a lambda to avoid connecting a signal to another signal (Cory Fields) Pull request description: This drops our dependency on `boost::signals2`, leaving `boost::multi_index` as the only remaining boost dependency for bitcoind. `boost::signals2` is a complex beast, but we only use a small portion of it. Namely: it's a way for multiple subscribers to connect to the same event, and the ability to later disconnect individual subscribers from that event. `btcsignals` adheres to the subset of the `boost::signals2` API that we currently use, and thus is a drop-in replacement. Rather than implementing a complex `slot` tracking class that we never used anyway (and which was much more useful in the days before std::function existed), callbacks are simply wrapped directly in `std::function`s. The new tests work with either `boost::signals2` or the new `btcsignals` implementation. Reviewers can verify functional equivalency by running the tests in the commit that introduces them against `boost::signals2`, then again with `btcsignals`. The majority of the commits in this PR are preparation and cleanup. Once `boost::signals2` is no longer needed, it is removed from depends. Additionally, a few CMake targets no longer need boost includes as they were previously only required for signals. I think this is actually pretty straightforward to review. I kept things simple, including keeping types unmovable/uncopyable where possible rather than trying to define those semantics. In doing so, the new implementation has even fewer type requirements than boost, which I believe is due to a boost bug. I've opened a PR upstream for that to attempt to maintain parity between the implementations. See individual commits for more details. Closes #26442. ACKs for top commit: fjahr: Code review ACK242b0ebb5cmaflcko: re-review ACK242b0ebb5c🎯 w0xlt: reACK242b0ebb5cTree-SHA512: 9a472afa4f655624fa44493774a63b57509ad30fb61bf1d89b6d0b52000cb9a1409a5b8d515a99c76e0b26b2437c30508206c29a7dd44ea96eb1979d572cd4d4