]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Don't start the NetworkListener thread in config check mode 16898/head
authorRemi Gacogne <remi.gacogne@powerdns.com>
Tue, 17 Feb 2026 15:04:34 +0000 (16:04 +0100)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Tue, 17 Feb 2026 15:04:34 +0000 (16:04 +0100)
Not only is this useless, there is a risk of race if the thread is not
created quickly enough, so when the main thread reaches the end of the
configuration and exits the new thread tries to access an object that
has been freed.

Signed-off-by: Remi Gacogne <remi.gacogne@powerdns.com>
pdns/dnsdistdist/dnsdist-lua-bindings-network.cc
pdns/dnsdistdist/dnsdist-lua.cc
pdns/dnsdistdist/dnsdist-lua.hh

index 856158cfc76f272a5fc21f7eedfe74c0f286726a..a155bd8d3b6c8b3d1417920d80bc1c0c9175e4e2 100644 (file)
@@ -26,7 +26,7 @@
 #include "dnsdist-lua-network.hh"
 #include "dolog.hh"
 
-void setupLuaBindingsNetwork(LuaContext& luaCtx, bool client)
+void setupLuaBindingsNetwork(LuaContext& luaCtx, bool client, bool configCheck)
 {
   luaCtx.writeFunction("newNetworkEndpoint", [client](const std::string& path) {
     if (client) {
@@ -93,8 +93,8 @@ void setupLuaBindingsNetwork(LuaContext& luaCtx, bool client)
     });
   });
 
-  luaCtx.registerFunction<void (std::shared_ptr<dnsdist::NetworkListener>::*)()>("start", [client](std::shared_ptr<dnsdist::NetworkListener>& listener) {
-    if (client) {
+  luaCtx.registerFunction<void (std::shared_ptr<dnsdist::NetworkListener>::*)()>("start", [client, configCheck](std::shared_ptr<dnsdist::NetworkListener>& listener) {
+    if (client || configCheck) {
       return;
     }
 
index f5a34c54b83a5dda3adb6ecc7164903588d6e741..5228a157c8fe7329c817d05d132d23871b5ad267 100644 (file)
@@ -3298,7 +3298,7 @@ void setupLuaBindingsOnly(LuaContext& luaCtx, bool client, bool configCheck)
   setupLuaBindingsDNSQuestion(luaCtx);
   setupLuaBindingsKVS(luaCtx, client);
   setupLuaBindingsLogging(luaCtx);
-  setupLuaBindingsNetwork(luaCtx, client);
+  setupLuaBindingsNetwork(luaCtx, client, configCheck);
   setupLuaBindingsPacketCache(luaCtx, client);
   setupLuaBindingsProtoBuf(luaCtx, client, configCheck);
   setupLuaBindingsRings(luaCtx, client);
index 8851fff5ec58b32b0450f5e8ba03fcb993a23d10..d1f0a0df404e983c28bcd4a629520cd521d0b723 100644 (file)
@@ -52,7 +52,7 @@ void setupLuaBindingsDNSParser(LuaContext& luaCtx);
 void setupLuaBindingsDNSQuestion(LuaContext& luaCtx);
 void setupLuaBindingsKVS(LuaContext& luaCtx, bool client);
 void setupLuaBindingsLogging(LuaContext& luaCtx);
-void setupLuaBindingsNetwork(LuaContext& luaCtx, bool client);
+void setupLuaBindingsNetwork(LuaContext& luaCtx, bool client, bool configCheck);
 void setupLuaBindingsPacketCache(LuaContext& luaCtx, bool client);
 void setupLuaBindingsProtoBuf(LuaContext& luaCtx, bool client, bool configCheck);
 void setupLuaBindingsRings(LuaContext& luaCtx, bool client);