]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Clean up Lua objects before exiting, in coverage mode
authorRemi Gacogne <remi.gacogne@powerdns.com>
Thu, 30 Sep 2021 13:49:23 +0000 (15:49 +0200)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Wed, 13 Oct 2021 13:19:53 +0000 (15:19 +0200)
pdns/dnsdist-web.cc
pdns/dnsdist.cc
pdns/dnsdistdist/dnsdist-web.hh

index 5fc86119c636fd647a3e1ccccb62efcf930d09c8..d70d60c92c862507b248e03e9f7c0b94b77e41aa 100644 (file)
@@ -1324,6 +1324,11 @@ void registerWebHandler(const std::string& endpoint, std::function<void(const Ya
   s_webHandlers[endpoint] = handler;
 }
 
+void clearWebHandlers()
+{
+  s_webHandlers.clear();
+}
+
 static void redirectToIndex(const YaHTTP::Request& req, YaHTTP::Response& resp)
 {
   const string charset = "; charset=utf-8";
index 5684922cc77799691150aac7e085fb981a8d049c..306446f814e42a4ffe592af153318bfdfe405c66 100644 (file)
@@ -2176,8 +2176,22 @@ static void usage()
 }
 
 #ifdef COVERAGE
+static void cleanupLuaObjects()
+{
+  /* when our coverage mode is enabled, we need to make
+     that the Lua objects destroyed before the Lua contexts. */
+  g_ruleactions.setState({});
+  g_respruleactions.setState({});
+  g_cachehitrespruleactions.setState({});
+  g_selfansweredrespruleactions.setState({});
+  g_dstates.setState({});
+  g_policy.setState(ServerPolicy());
+  clearWebHandlers();
+}
+
 static void sighandler(int sig)
 {
+  cleanupLuaObjects();
   exit(EXIT_SUCCESS);
 }
 #endif
@@ -2408,6 +2422,7 @@ int main(int argc, char** argv)
       // No exception was thrown
       infolog("Configuration '%s' OK!", g_cmdLine.config);
 #ifdef COVERAGE
+      cleanupLuaObjects();
       exit(EXIT_SUCCESS);
 #else
       _exit(EXIT_SUCCESS);
@@ -2661,6 +2676,7 @@ int main(int argc, char** argv)
       doConsole();
     }
 #ifdef COVERAGE
+    cleanupLuaObjects();
     exit(EXIT_SUCCESS);
 #else
     _exit(EXIT_SUCCESS);
index 110d638d073ae82f2c0c1efefbbac641825379ea..fea62bedffe506e596ed303e296b0d8de6c8d12b 100644 (file)
@@ -12,3 +12,4 @@ void setWebserverMaxConcurrentConnections(size_t);
 void dnsdistWebserverThread(int sock, const ComboAddress& local);
 
 void registerBuiltInWebHandlers();
+void clearWebHandlers();