From: Lennart Poettering Date: Tue, 10 Dec 2013 17:01:10 +0000 (+0000) Subject: macro: log assertion at debug level in assert_return() X-Git-Tag: v209~1053 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=80514f9c9bb86dbba761e4b026e5d62156ea112c macro: log assertion at debug level in assert_return() --- diff --git a/src/libsystemd-bus/bus-control.c b/src/libsystemd-bus/bus-control.c index 966398944..47e91118a 100644 --- a/src/libsystemd-bus/bus-control.c +++ b/src/libsystemd-bus/bus-control.c @@ -27,7 +27,6 @@ #include #include "strv.h" - #include "sd-bus.h" #include "bus-internal.h" #include "bus-message.h" diff --git a/src/libsystemd-id128/sd-id128.c b/src/libsystemd-id128/sd-id128.c index 3fbad71a5..07d241534 100644 --- a/src/libsystemd-id128/sd-id128.c +++ b/src/libsystemd-id128/sd-id128.c @@ -23,10 +23,9 @@ #include #include -#include "sd-id128.h" - #include "util.h" #include "macro.h" +#include "sd-id128.h" _public_ char *sd_id128_to_string(sd_id128_t id, char s[33]) { unsigned n; diff --git a/src/login/sd-login.c b/src/login/sd-login.c index 7ae3db039..c9a2e8a07 100644 --- a/src/login/sd-login.c +++ b/src/login/sd-login.c @@ -28,10 +28,10 @@ #include "util.h" #include "cgroup-util.h" #include "macro.h" -#include "sd-login.h" #include "strv.h" #include "fileio.h" #include "login-shared.h" +#include "sd-login.h" _public_ int sd_pid_get_session(pid_t pid, char **session) { diff --git a/src/shared/log.c b/src/shared/log.c index 8f4995a0c..2531e0da0 100644 --- a/src/shared/log.c +++ b/src/shared/log.c @@ -687,7 +687,7 @@ int log_meta_object( #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wformat-nonliteral" -_noreturn_ static void log_assert(const char *text, const char *file, int line, const char *func, const char *format) { +static void log_assert(int level, const char *text, const char *file, int line, const char *func, const char *format) { static char buffer[LINE_MAX]; snprintf(buffer, sizeof(buffer), format, text, file, line, func); @@ -695,17 +695,22 @@ _noreturn_ static void log_assert(const char *text, const char *file, int line, char_array_0(buffer); log_abort_msg = buffer; - log_dispatch(LOG_CRIT, file, line, func, NULL, NULL, buffer); - abort(); + log_dispatch(level, file, line, func, NULL, NULL, buffer); } #pragma GCC diagnostic pop _noreturn_ void log_assert_failed(const char *text, const char *file, int line, const char *func) { - log_assert(text, file, line, func, "Assertion '%s' failed at %s:%u, function %s(). Aborting."); + log_assert(LOG_CRIT, text, file, line, func, "Assertion '%s' failed at %s:%u, function %s(). Aborting."); + abort(); } _noreturn_ void log_assert_failed_unreachable(const char *text, const char *file, int line, const char *func) { - log_assert(text, file, line, func, "Code should not be reached '%s' at %s:%u, function %s(). Aborting."); + log_assert(LOG_CRIT, text, file, line, func, "Code should not be reached '%s' at %s:%u, function %s(). Aborting."); + abort(); +} + +void log_assert_failed_return(const char *text, const char *file, int line, const char *func) { + log_assert(LOG_DEBUG, text, file, line, func, "Assertion '%s' failed at %s:%u, function %s(). Ignoring."); } int log_oom_internal(const char *file, int line, const char *func) { diff --git a/src/shared/log.h b/src/shared/log.h index 0dc5c2610..de0e00037 100644 --- a/src/shared/log.h +++ b/src/shared/log.h @@ -136,6 +136,12 @@ _noreturn_ void log_assert_failed_unreachable( int line, const char *func); +void log_assert_failed_return( + const char *text, + const char *file, + int line, + const char *func); + #define log_full(level, ...) \ do { \ if (log_get_max_level() >= (level)) \ diff --git a/src/shared/macro.h b/src/shared/macro.h index 419809501..fd3762eed 100644 --- a/src/shared/macro.h +++ b/src/shared/macro.h @@ -153,10 +153,12 @@ static inline size_t ALIGN_TO(size_t l, size_t ali) { #define assert_cc(expr) struct UNIQUE(_assert_struct_) { char x[(expr) ? 0 : -1]; }; #endif -#define assert_return(expr, r) \ - do { \ - if (_unlikely_(!(expr))) \ - return (r); \ +#define assert_return(expr, r) \ + do { \ + if (_unlikely_(!(expr))) { \ + log_assert_failed_return(#expr, __FILE__, __LINE__, __PRETTY_FUNCTION__); \ + return (r); \ + } \ } while (false) #define PTR_TO_INT(p) ((int) ((intptr_t) (p)))