]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Expensive check declaration
authorMaria Matejka <mq@ucw.cz>
Wed, 14 Aug 2019 14:22:39 +0000 (16:22 +0200)
committerMaria Matejka <mq@ucw.cz>
Sat, 17 Aug 2019 11:48:55 +0000 (13:48 +0200)
Intended to be run at every operation with complex data structures
to check their consistency and validity.

configure.ac
lib/birdlib.h

index f4de8f9301c7f0559064be39e8272ae68bccdcb2..81f2eaefa1ad1725b44344674c579ef3d2e70cc3 100644 (file)
@@ -18,6 +18,12 @@ AC_ARG_ENABLE([debug],
   [enable_debug=no]
 )
 
+AC_ARG_ENABLE([debug-expensive],
+  [AS_HELP_STRING([--enable-debug-expensive], [enable expensive consistency checks (implies --enable-debug) @<:@no@:>@])],
+  [],
+  [enable_debug_expensive=no]
+)
+
 AC_ARG_ENABLE([memcheck],
   [AS_HELP_STRING([--enable-memcheck], [check memory allocations when debugging @<:@yes@:>@])],
   [],
@@ -68,6 +74,9 @@ AC_ARG_VAR([FLEX], [location of the Flex program])
 AC_ARG_VAR([BISON], [location of the Bison program])
 AC_ARG_VAR([M4], [location of the M4 program])
 
+if test "$enable_debug_expensive" = yes; then
+  enable_debug=yes
+fi
 
 if test "$srcdir" = . ; then
   # Building in current directory => create obj directory holding all objects
@@ -336,6 +345,10 @@ if test "$enable_debug" = yes ; then
       AC_CHECK_LIB([efence], [malloc])
     fi
   fi
+
+  if test "enable_debug_expensive" = yes ; then
+    AC_DEFINE([ENABLE_EXPENSIVE_CHECKS], [1], [Define to 1 if you want to run expensive consistency checks.])
+  fi
 fi
 
 CLIENT=birdcl
index b6b7f6bd1caed38494bb26890363d1a7fd68ab38..1112a01745fd7cfa3537801dd2881b84987e3d01 100644 (file)
@@ -161,15 +161,22 @@ void debug(const char *msg, ...); /* Printf to debug output */
 
 #define ASSERT_DIE(x) do { if (!(x)) bug("Assertion '%s' failed at %s:%d", #x, __FILE__, __LINE__); } while(0)
 
+#define EXPENSIVE_CHECK(x) /* intentionally left blank */
+
 #ifdef DEBUGGING
 #define ASSERT(x) ASSERT_DIE(x)
 #define ASSUME(x) ASSERT_DIE(x)
+#ifdef ENABLE_EXPENSIVE_CHECKS
+#undef EXPENSIVE_CHECK
+#define EXPENSIVE_CHECK(x) ASSERT_DIE(x)
+#endif
 #else
 #define ASSERT(x) do { if (!(x)) log(L_BUG "Assertion '%s' failed at %s:%d", #x, __FILE__, __LINE__); } while(0)
 #define ASSUME(x) /* intentionally left blank */
 #endif
 
 
+
 /* Pseudorandom numbers */
 
 u32 random_u32(void);