{
for (const auto& rpzPrimary : delayedThreads.rpzPrimaryThreads) {
try {
+ // The get calls all return a value object here. That is esential, since we want copies so that RPZIXFRTracker gets values
+ // with the proper lifetime.
std::thread t(RPZIXFRTracker, std::get<0>(rpzPrimary), std::get<1>(rpzPrimary), std::get<2>(rpzPrimary), std::get<3>(rpzPrimary), std::get<4>(rpzPrimary), std::get<5>(rpzPrimary), std::get<6>(rpzPrimary) * 1024 * 1024, std::get<7>(rpzPrimary), std::get<8>(rpzPrimary), std::get<9>(rpzPrimary), std::get<10>(rpzPrimary), std::get<11>(rpzPrimary), generation);
t.detach();
}
struct luaConfigDelayedThreads
{
+ // Please make sure that the tuple below only contains value types since they are used as parameters in a thread ct
std::vector<std::tuple<std::vector<ComboAddress>, boost::optional<DNSFilterEngine::Policy>, bool, uint32_t, size_t, TSIGTriplet, size_t, ComboAddress, uint16_t, uint32_t, std::shared_ptr<SOARecordContent>, std::string> > rpzPrimaryThreads;
};