From: Yu Watanabe Date: Thu, 16 Nov 2023 01:48:37 +0000 (+0900) Subject: log: introduce a knob to make assert_return() critical X-Git-Tag: v256-rc1~1408^2~2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=93bb67090c1cf8779a2609bd7a0bcaa5ead08f3d;p=thirdparty%2Fsystemd.git log: introduce a knob to make assert_return() critical These can be used to check if we trigger assert_return() unexpectedly. Co-authored-by: Frantisek Sumsal --- diff --git a/src/basic/log.c b/src/basic/log.c index 34e0ccd9560..8bcdfa03e58 100644 --- a/src/basic/log.c +++ b/src/basic/log.c @@ -69,6 +69,7 @@ static bool upgrade_syslog_to_journal = false; static bool always_reopen_console = false; static bool open_when_needed = false; static bool prohibit_ipc = false; +static bool assert_return_is_critical = false; /* Akin to glibc's __abort_msg; which is private and we hence cannot * use here. */ @@ -981,6 +982,10 @@ void log_assert_failed_return( const char *file, int line, const char *func) { + + if (assert_return_is_critical) + log_assert_failed(text, file, line, func); + PROTECT_ERRNO; log_assert(LOG_DEBUG, text, file, line, func, "Assertion '%s' failed at %s:%u, function %s(). Ignoring."); @@ -1232,6 +1237,14 @@ static int log_set_ratelimit_kmsg_from_string(const char *e) { return 0; } +void log_set_assert_return_is_critical(bool b) { + assert_return_is_critical = b; +} + +bool log_get_assert_return_is_critical(void) { + return assert_return_is_critical; +} + static int parse_proc_cmdline_item(const char *key, const char *value, void *data) { /* diff --git a/src/basic/log.h b/src/basic/log.h index 9008d473909..140e501eb1e 100644 --- a/src/basic/log.h +++ b/src/basic/log.h @@ -331,6 +331,9 @@ void log_set_open_when_needed(bool b); * stderr, the console or kmsg */ void log_set_prohibit_ipc(bool b); +void log_set_assert_return_is_critical(bool b); +bool log_get_assert_return_is_critical(void) _pure_; + int log_dup_console(void); int log_syntax_internal(