runOnce(*d_data, now, timeout);
}
-void NetworkListener::mainThread(std::shared_ptr<ListenerData>& dataArg)
+// NOLINTNEXTLINE(performance-unnecessary-value-param): take our own copy of the shared_ptr so it's still alive if the NetworkListener object gets destroyed while we are still running
+void NetworkListener::mainThread(std::shared_ptr<ListenerData> data)
{
- /* take our own copy of the shared_ptr so it's still alive if the NetworkListener object
- gets destroyed while we are still running */
- // NOLINTNEXTLINE(performance-unnecessary-copy-initialization): we really need a copy here, or we end up with use-after-free as explained above
- auto data = dataArg;
setThreadName("dnsdist/lua-net");
timeval now{};
void NetworkListener::start()
{
- std::thread main = std::thread([this] {
- mainThread(d_data);
+ std::thread main = std::thread([data = d_data]() mutable {
+ mainThread(std::move(data));
});
main.detach();
}
};
static void readCB(int desc, FDMultiplexer::funcparam_t& param);
- static void mainThread(std::shared_ptr<ListenerData>& data);
+ static void mainThread(std::shared_ptr<ListenerData> data);
static void runOnce(ListenerData& data, timeval& now, uint32_t timeout);
struct CBData