From: Michael Poole Date: Sun, 30 Mar 2008 02:10:28 +0000 (-0400) Subject: src/log.c: Avoid recursive logging. X-Git-Tag: v1.4.0-rc3~23 X-Git-Url: http://git.pk910.de/?p=srvx.git;a=commitdiff_plain;h=6bd8682423b3da288dda2f19816b23970387c1da src/log.c: Avoid recursive logging. (Allocator failures can lead to some nasty recursive logging attempts.) --- diff --git a/src/log.c b/src/log.c index fe9f74a..736360d 100644 --- a/src/log.c +++ b/src/log.c @@ -51,6 +51,7 @@ struct log_type { unsigned int log_count; unsigned int max_age; unsigned int max_count; + unsigned int depth; unsigned int default_set : 1; }; @@ -569,6 +570,9 @@ log_module(struct log_type *type, enum log_severity sev, const char *format, ... if (!type) return; + if (type->depth) + return; + ++type->depth; if (sev > LOG_FATAL) { log_module(MAIN_LOG, LOG_ERROR, "Illegal log_module severity %d", sev); return; @@ -589,6 +593,7 @@ log_module(struct log_type *type, enum log_severity sev, const char *format, ... /* Special behavior before we start full operation */ fprintf(stderr, "%s: %s\n", log_severity_names[sev], msgbuf); } + --type->depth; if (sev == LOG_FATAL) { assert(0 && "fatal message logged"); _exit(1);