From 47271fd56eadbc451e3ef8b2692dcc8bd2d5d8c7 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Fri, 23 Feb 2018 13:29:03 +0100 Subject: [PATCH] basic/log: add an assert that does not recurse into logging functions Then it can be used in the asserts in logging functions without causing infinite recursion. The error is just printed to stderr, it should be good enough for the common case. --- src/basic/log.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/basic/log.c b/src/basic/log.c index f3bb69855..719702054 100644 --- a/src/basic/log.c +++ b/src/basic/log.c @@ -85,6 +85,16 @@ static bool prohibit_ipc = false; * use here. */ static char *log_abort_msg = NULL; +/* An assert to use in logging functions that does not call recursively + * into our logging functions (since that might lead to a loop). */ +#define assert_raw(expr) \ + do { \ + if (_unlikely_(!(expr))) { \ + fputs(#expr "\n", stderr); \ + abort(); \ + } \ + } while (false) + static void log_close_console(void) { if (console_fd < 0) @@ -543,7 +553,7 @@ static int log_do_header( isempty(extra) ? "" : extra, isempty(extra) ? "" : "\n", program_invocation_short_name); - assert((size_t) r < size); + assert_raw((size_t) r < size); return 0; } @@ -597,7 +607,7 @@ int log_dispatch_internal( const char *extra, char *buffer) { - assert(buffer); + assert_raw(buffer); if (error < 0) error = -error; -- 2.30.2