From 93bb67090c1cf8779a2609bd7a0bcaa5ead08f3d Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Thu, 16 Nov 2023 10:48:37 +0900 Subject: [PATCH] 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 --- src/basic/log.c | 13 +++++++++++++ src/basic/log.h | 3 +++ 2 files changed, 16 insertions(+) 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( -- 2.47.3