From b07c5b16a5deeb85b7fc434e1f3043c76d81bfc2 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 20 Nov 2013 22:11:10 +0100 Subject: [PATCH] valgrind: make running PID 1 in valgrind useful Since valgrind only generates useful output on exit() (rather than exec()) we need to explicitly exit when valgrind is detected. Conflicts: src/core/main.c --- configure.ac | 2 +- src/core/main.c | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index a9182520f..66d2407e6 100644 --- a/configure.ac +++ b/configure.ac @@ -704,7 +704,7 @@ AC_DEFINE_UNQUOTED(TELINIT, ["$TELINIT"], [Path to telinit]) AC_SUBST(TELINIT) -AC_CHECK_HEADERS_ONCE([valgrind/memcheck.h]) +AC_CHECK_HEADERS_ONCE([valgrind/memcheck.h valgrind/valgrind.h]) # ------------------------------------------------------------------------------ have_myhostname=no diff --git a/src/core/main.c b/src/core/main.c index 954b480fd..80d066825 100644 --- a/src/core/main.c +++ b/src/core/main.c @@ -34,6 +34,10 @@ #include #include +#ifdef HAVE_VALGRIND_VALGRIND_H +#include +#endif + #include "manager.h" #include "log.h" #include "load-fragment.h" @@ -1920,6 +1924,15 @@ finish: if (fds) fdset_free(fds); +#ifdef HAVE_VALGRIND_VALGRIND_H + /* If we are PID 1 and running under valgrind, then let's exit + * here explicitly. valgrind will only generate nice output on + * exit(), not on exec(), hence let's do the former not the + * latter here. */ + if (getpid() == 1 && RUNNING_ON_VALGRIND) + return 0; +#endif + if (shutdown_verb) { const char * command_line[] = { SYSTEMD_SHUTDOWN_BINARY_PATH,