src/log.c: Avoid recursive logging.
[srvx.git] / src / log.c
index 7368fbe0373615d53320b3d3c9ab31cbef50e219..736360d91582709ddab4422dbdf9142d5b7b45f1 100644 (file)
--- 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;
 };
 
@@ -73,7 +74,7 @@ static struct dict *log_types;
 static struct log_type *log_default;
 static int log_inited, log_debugged;
 
-DEFINE_LIST(logList, struct logDestination*);
+DEFINE_LIST(logList, struct logDestination*)
 static void log_format_audit(struct logEntry *entry);
 static const struct message_entry msgtab[] = {
     { "MSG_INVALID_FACILITY", "$b%s$b is an invalid log facility." },
@@ -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);