From 2c6d934ef44159853562cf0b0d245c0d56105dc6 Mon Sep 17 00:00:00 2001 From: Arne Welzel Date: Wed, 5 Feb 2025 13:49:06 +0100 Subject: [PATCH] cluster/zeromq: Use lambda for thread trampoline --- src/cluster/backend/zeromq/ZeroMQ.cc | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/src/cluster/backend/zeromq/ZeroMQ.cc b/src/cluster/backend/zeromq/ZeroMQ.cc index 66e0b2fd9e..ee1ec4df89 100644 --- a/src/cluster/backend/zeromq/ZeroMQ.cc +++ b/src/cluster/backend/zeromq/ZeroMQ.cc @@ -59,15 +59,6 @@ constexpr DebugFlag operator&(zeek_uint_t x, DebugFlag y) { } \ } while ( 0 ) -namespace { -void self_thread_fun(void* arg) { - auto* self = static_cast(arg); - self->Run(); -} - -} // namespace - - ZeroMQBackend::ZeroMQBackend(std::unique_ptr es, std::unique_ptr ls, std::unique_ptr ehs) : ThreadedBackend(std::move(es), std::move(ls), std::move(ehs)) { @@ -227,7 +218,9 @@ bool ZeroMQBackend::DoInit() { // Setup connectivity between main and child thread. main_inproc.bind("inproc://inproc-bridge"); child_inproc.connect("inproc://inproc-bridge"); - self_thread = std::thread(self_thread_fun, this); + + // Thread is joined in backend->DoTerminate(), backend outlives it. + self_thread = std::thread([](auto* backend) { backend->Run(); }, this); // After connecting, call ThreadedBackend::DoInit() to register // the IO source with the loop.