In general, with a few specific exceptions, ovs_assert is now preferred over assert, so this commit adds a check for that in the top-level Makefile.
Signed-off-by: Ben Pfaff <b...@nicira.com> --- Makefile.am | 13 +++++++++++++ configure.ac | 1 + lib/vlog.c | 5 +++++ lib/worker.c | 5 +++++ 4 files changed, 24 insertions(+), 0 deletions(-) diff --git a/Makefile.am b/Makefile.am index b71ca1f..56fe3bb 100644 --- a/Makefile.am +++ b/Makefile.am @@ -180,6 +180,19 @@ rate-limit-check: fi .PHONY: rate-limit-check +# Check that assert.h is not used outside a whitelist of files. +ALL_LOCAL += check-assert-h-usage +check-assert-h-usage: + @if test -e $(srcdir)/.git && (git --version) >/dev/null 2>&1 && \ + (cd $(srcdir) && git --no-pager grep -l -E '[<]assert.h[>]') | \ + $(EGREP) -v '^lib/(sflow_receiver|vlog|worker).c$$|^tests/'; \ + then \ + echo "Files listed above unexpectedly #include <""assert.h"">."; \ + echo "Please use ovs_assert (from util.h) instead of assert."; \ + exit 1; \ + fi +.PHONY: check-assert-h-usage + if HAVE_GROFF ALL_LOCAL += manpage-check manpage-check: $(man_MANS) $(dist_man_MANS) $(noinst_man_MANS) diff --git a/configure.ac b/configure.ac index 32940a5..b85cf06 100644 --- a/configure.ac +++ b/configure.ac @@ -27,6 +27,7 @@ AC_PROG_CPP AC_PROG_RANLIB AC_PROG_MKDIR_P AC_PROG_FGREP +AC_PROG_EGREP AC_ARG_VAR([PERL], [path to Perl interpreter]) AC_PATH_PROG([PERL], perl, no) diff --git a/lib/vlog.c b/lib/vlog.c index 0bd9bd1..600c4b6 100644 --- a/lib/vlog.c +++ b/lib/vlog.c @@ -40,6 +40,11 @@ VLOG_DEFINE_THIS_MODULE(vlog); +/* ovs_assert() logs the assertion message, so using ovs_assert() in this + * source file could cause recursion. */ +#undef ovs_assert +#define ovs_assert use_assert_instead_of_ovs_assert_in_this_module + /* Name for each logging level. */ static const char *level_names[VLL_N_LEVELS] = { #define VLOG_LEVEL(NAME, SYSLOG_LEVEL) #NAME, diff --git a/lib/worker.c b/lib/worker.c index f2b896e..58ee85b 100644 --- a/lib/worker.c +++ b/lib/worker.c @@ -37,6 +37,11 @@ VLOG_DEFINE_THIS_MODULE(worker); +/* ovs_assert() logs the assertion message and logging sometimes goes through a + * worker, so using ovs_assert() in this source file could cause recursion. */ +#undef ovs_assert +#define ovs_assert use_assert_instead_of_ovs_assert_in_this_module + /* Header for an RPC request. */ struct worker_request { size_t request_len; /* Length of the payload in bytes. */ -- 1.7.2.5 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev