]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
Rec: Asynchronously destroy old connections to dnstap servers
authorFred Morcos <fred.morcos@open-xchange.com>
Thu, 11 Aug 2022 13:35:29 +0000 (15:35 +0200)
committerFred Morcos <fred.morcos@open-xchange.com>
Fri, 12 Aug 2022 11:00:36 +0000 (13:00 +0200)
With @omoerbeek

Closes #11795

pdns/recursordist/rec-main.cc

index d91cb080c6c1049633b01d5f5d38249a8e82762a..de718753b2841c907a26ffe03746ae748c37eb56 100644 (file)
@@ -625,12 +625,20 @@ static std::shared_ptr<std::vector<std::unique_ptr<FrameStreamLogger>>> startFra
   return result;
 }
 
+static void asyncFrameStreamLoggersCleanup(std::shared_ptr<std::vector<std::unique_ptr<FrameStreamLogger>>>&& servers)
+{
+  auto thread = std::thread([&] {
+    servers.reset();
+  });
+  thread.detach();
+}
+
 bool checkFrameStreamExport(LocalStateHolder<LuaConfigItems>& luaconfsLocal)
 {
   if (!luaconfsLocal->frameStreamExportConfig.enabled) {
     if (t_frameStreamServersInfo.servers) {
       // dt's take care of cleanup
-      t_frameStreamServersInfo.servers.reset();
+      asyncFrameStreamLoggersCleanup(std::move(t_frameStreamServersInfo.servers));
       t_frameStreamServersInfo.config = luaconfsLocal->frameStreamExportConfig;
     }
 
@@ -643,7 +651,7 @@ bool checkFrameStreamExport(LocalStateHolder<LuaConfigItems>& luaconfsLocal)
   if (t_frameStreamServersInfo.generation < luaconfsLocal->generation && t_frameStreamServersInfo.config != luaconfsLocal->frameStreamExportConfig) {
     if (t_frameStreamServersInfo.servers) {
       // dt's take care of cleanup
-      t_frameStreamServersInfo.servers.reset();
+      asyncFrameStreamLoggersCleanup(std::move(t_frameStreamServersInfo.servers));
     }
 
     auto dnsTapLog = g_slog->withName("dnstap");