]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib: event-log.c - Ensure checks for enabling debug logging are always run.
authorStephan Bosch <stephan.bosch@open-xchange.com>
Thu, 16 Jan 2020 23:36:54 +0000 (00:36 +0100)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Fri, 31 Jan 2020 10:39:49 +0000 (10:39 +0000)
src/lib/event-log.c
src/lib/lib-event-private.h
src/lib/lib-event.c

index 396d13b930559d972598462419bfac358d262e41..23755a89477ef310033bddde48b64a4239c7a0f5 100644 (file)
@@ -247,6 +247,10 @@ bool event_want_log_level(struct event *event, enum log_type level,
        if (event->min_log_level <= level)
                return TRUE;
 
+       if (event->debug_level_checked)
+               return event->sending_debug_log;
+       event->debug_level_checked = TRUE;
+
        if (event->forced_debug)
                event->sending_debug_log = TRUE;
 
@@ -355,6 +359,10 @@ void event_logv(struct event *event, const struct event_log_params *params,
                                 params->source_linenum, TRUE);
        }
 
+       (void)event_want_log_level(event, params->log_type,
+                                  event->source_filename,
+                                  event->source_linenum);
+
        event_ref(event);
        event_logv_params(event, params, fmt, args);
        event_set_source(event, orig_source_filename,
@@ -366,12 +374,14 @@ struct event *event_set_forced_debug(struct event *event, bool force)
 {
        if (force)
                event->forced_debug = TRUE;
+       event->debug_level_checked = FALSE;
        return event;
 }
 
 struct event *event_unset_forced_debug(struct event *event)
 {
        event->forced_debug = FALSE;
+       event->debug_level_checked = FALSE;
        return event;
 }
 
index 9fb9753e86a4b3961f44abc17660b2f56e03a974..691ac74181b96e25f6a6e1325ac87c75506a19f1 100644 (file)
@@ -31,6 +31,7 @@ struct event {
        bool always_log_source:1;
        bool sending_debug_log:1;
        bool id_sent_to_stats:1;
+       bool debug_level_checked:1;
 
 /* Fields that are exported & imported: */
        struct timeval tv_created_ioloop;
index 5428fc31902b2745a5d7066bd2e4f49fe8cc4bdf..61f1d00083f4e61f8eee0ec125e3a8096251d428 100644 (file)
@@ -583,6 +583,7 @@ struct event *event_set_always_log_source(struct event *event)
 struct event *event_set_min_log_level(struct event *event, enum log_type level)
 {
        event->min_log_level = level;
+       event->debug_level_checked = FALSE;
        return event;
 }
 
@@ -757,6 +758,7 @@ event_add_categories(struct event *event,
                if (!event_find_category(event, categories[i]))
                        array_push_back(&event->categories, &representative);
        }
+       event->debug_level_checked = FALSE;
        return event;
 }