#include "event-filter.h"
#include "lib-event-private.h"
+unsigned int event_filter_replace_counter = 1;
+
static struct event_filter *global_debug_log_filter = NULL;
static struct event_filter *global_debug_send_filter = NULL;
static struct event_filter *global_core_log_filter = NULL;
if (event->min_log_level <= level)
return TRUE;
- if (event->debug_level_checked)
+ if (event->debug_level_checked_filter_counter == event_filter_replace_counter)
return event->sending_debug_log;
- event->debug_level_checked = TRUE;
+ event->debug_level_checked_filter_counter =
+ event_filter_replace_counter;
if (event->forced_debug)
event->sending_debug_log = TRUE;
{
if (force)
event->forced_debug = TRUE;
- event->debug_level_checked = FALSE;
+ event_recalculate_debug_level(event);
return event;
}
struct event *event_unset_forced_debug(struct event *event)
{
event->forced_debug = FALSE;
- event->debug_level_checked = FALSE;
+ event_recalculate_debug_level(event);
return event;
}
event_unset_global_debug_log_filter();
global_debug_log_filter = filter;
event_filter_ref(global_debug_log_filter);
+ event_filter_replace_counter++;
}
struct event_filter *event_get_global_debug_log_filter(void)
void event_unset_global_debug_log_filter(void)
{
event_filter_unref(&global_debug_log_filter);
+ event_filter_replace_counter++;
}
void event_set_global_debug_send_filter(struct event_filter *filter)
event_unset_global_debug_send_filter();
global_debug_send_filter = filter;
event_filter_ref(global_debug_send_filter);
+ event_filter_replace_counter++;
}
struct event_filter *event_get_global_debug_send_filter(void)
void event_unset_global_debug_send_filter(void)
{
event_filter_unref(&global_debug_send_filter);
+ event_filter_replace_counter++;
}
void event_set_global_core_log_filter(struct event_filter *filter)
event_unset_global_core_log_filter();
global_core_log_filter = filter;
event_filter_ref(global_core_log_filter);
+ event_filter_replace_counter++;
}
struct event_filter *event_get_global_core_log_filter(void)
void event_unset_global_core_log_filter(void)
{
event_filter_unref(&global_core_log_filter);
+ event_filter_replace_counter++;
}
char *log_prefix;
unsigned int log_prefixes_dropped;
+ /* sending_debug_log can be used if this value matches
+ event_filter_replace_counter. */
+ unsigned int debug_level_checked_filter_counter;
event_log_prefix_callback_t *log_prefix_callback;
void *log_prefix_callback_context;
event_log_message_callback_t *log_message_callback;
bool forced_debug:1;
bool always_log_source:1;
bool sending_debug_log:1;
- bool debug_level_checked:1;
/* Fields that are exported & imported: */
struct timeval tv_created_ioloop;
void event_category_register_callback(event_category_callback_t *callback);
void event_category_unregister_callback(event_category_callback_t *callback);
+static inline void event_recalculate_debug_level(struct event *event)
+{
+ event->debug_level_checked_filter_counter =
+ event_filter_replace_counter - 1;
+}
+
#endif
struct event *event_set_min_log_level(struct event *event, enum log_type level)
{
event->min_log_level = level;
- event->debug_level_checked = FALSE;
+ event_recalculate_debug_level(event);
return event;
}
array_push_back(&event->categories, &representative);
}
event_set_changed(event);
- event->debug_level_checked = FALSE;
+ event_recalculate_debug_level(event);
return event;
}