Replace boost::signals2 with homegrown CSignal<>

Drops the last boost::signals2 dependency from the GUI/wallet/smessage
notification path. CSignal<> is a std::function-based fan-out signal
with explicit Connection tokens (no equivalent-bind disconnect). Same
semantics for the void-returning case; non-void variant returns the
last-connected slot's result via std::optional.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-26 17:36:05 -07:00
parent 2ba0ecf428
commit 32330b420e
14 changed files with 236 additions and 60 deletions
+19 -9
View File
@@ -13,6 +13,7 @@
#include "main.h"
#include "net.h"
#include "notificationqueue.h"
#include "signal.h"
#undef printf
#include <boost/asio.hpp>
@@ -25,6 +26,7 @@
#include <boost/asio/ssl.hpp>
#include <fstream>
#include <boost/shared_ptr.hpp>
#include <boost/weak_ptr.hpp>
#include <memory>
#include <list>
@@ -886,7 +888,7 @@ void ThreadRPCServer2(void* parg)
boost::system::error_code v6_only_error;
boost::shared_ptr<ip::tcp::acceptor> acceptor(new ip::tcp::acceptor(io_service));
boost::signals2::signal<void ()> StopRequests;
CSignal<void()> StopRequests;
bool fListening = false;
std::string strerr;
@@ -902,10 +904,15 @@ void ThreadRPCServer2(void* parg)
acceptor->listen(socket_base::max_listen_connections);
RPCListen(acceptor, context, fUseSSL);
// Cancel outstanding listen-requests for this acceptor when shutting down
StopRequests.connect(signals2::slot<void ()>(
static_cast<void (ip::tcp::acceptor::*)()>(&ip::tcp::acceptor::close), acceptor.get())
.track(acceptor));
// Cancel outstanding listen-requests for this acceptor when shutting down.
// weak_ptr emulates signals2's .track(): if the acceptor has already been
// released by the time StopRequests fires, the slot is a no-op.
{
boost::weak_ptr<ip::tcp::acceptor> weak_acceptor(acceptor);
StopRequests.connect([weak_acceptor]() {
if (auto a = weak_acceptor.lock()) a->close();
});
}
fListening = true;
}
@@ -928,10 +935,13 @@ void ThreadRPCServer2(void* parg)
acceptor->listen(socket_base::max_listen_connections);
RPCListen(acceptor, context, fUseSSL);
// Cancel outstanding listen-requests for this acceptor when shutting down
StopRequests.connect(signals2::slot<void ()>(
static_cast<void (ip::tcp::acceptor::*)()>(&ip::tcp::acceptor::close), acceptor.get())
.track(acceptor));
// See note above on weak_ptr-based .track() emulation.
{
boost::weak_ptr<ip::tcp::acceptor> weak_acceptor(acceptor);
StopRequests.connect([weak_acceptor]() {
if (auto a = weak_acceptor.lock()) a->close();
});
}
fListening = true;
}