Ver código fonte

Add flag for interactive valgind dumps (#1593)

* Add flag for interactive valgind dumps

* Mark UA_ENABLE_VALGRIND_INTERACTIVE as advanced
Mark Giraud 7 anos atrás
pai
commit
15346f6383
3 arquivos alterados com 12 adições e 1 exclusões
  1. 3 0
      CMakeLists.txt
  2. 1 0
      include/ua_config.h.in
  3. 8 1
      src/server/ua_server_worker.c

+ 3 - 0
CMakeLists.txt

@@ -96,6 +96,9 @@ mark_as_advanced(UA_ENABLE_TYPENAMES)
 option(UA_ENABLE_DETERMINISTIC_RNG "Do not seed the random number generator (e.g. for unit tests)." OFF)
 mark_as_advanced(UA_ENABLE_DETERMINISTIC_RNG)
 
+option(UA_ENABLE_VALGRIND_INTERACTIVE "Enable dumping valgrind every iteration. CAUTION! SLOWDOWN!" OFF)
+mark_as_advanced(UA_ENABLE_VALGRIND_INTERACTIVE)
+
 option(UA_ENABLE_FULL_NS0 "Use the full NS0 instead of a minimal Namespace 0 nodeset" OFF)
 if (MSVC AND UA_ENABLE_FULL_NS0)
     # For the full NS0 we need a stack size of 8MB (as it is default on linux)

+ 1 - 0
include/ua_config.h.in

@@ -28,6 +28,7 @@ extern "C" {
 #cmakedefine UA_ENABLE_SUBSCRIPTIONS
 #cmakedefine UA_ENABLE_MULTITHREADING
 #cmakedefine UA_ENABLE_ENCRYPTION
+#cmakedefine UA_ENABLE_VALGRIND_INTERACTIVE
 
 /* Advanced Options */
 #cmakedefine UA_ENABLE_STATUSCODE_DESCRIPTIONS

+ 8 - 1
src/server/ua_server_worker.c

@@ -16,6 +16,9 @@
 
 #include "ua_util.h"
 #include "ua_server_internal.h"
+#ifdef UA_ENABLE_VALGRIND_INTERACTIVE
+#include <valgrind/memcheck.h>
+#endif
 
 #define UA_MAXTIMEOUT 50 /* Max timeout in ms between main-loop iterations */
 
@@ -429,7 +432,11 @@ UA_Server_run(UA_Server *server, volatile UA_Boolean *running) {
     UA_StatusCode retval = UA_Server_run_startup(server);
     if(retval != UA_STATUSCODE_GOOD)
         return retval;
-    while(*running)
+    while(*running) {
+#ifdef UA_ENABLE_VALGRIND_INTERACTIVE
+        VALGRIND_DO_LEAK_CHECK;
+#endif
         UA_Server_run_iterate(server, true);
+    }
     return UA_Server_run_shutdown(server);
 }