Skip to content

Commit

Permalink
lib: Add global core filter, which allows core dumping on matching ev…
Browse files Browse the repository at this point in the history
…ents
  • Loading branch information
sirainen authored and villesavolainen committed Apr 25, 2018
1 parent 8bb5f94 commit edddfbd
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 0 deletions.
28 changes: 28 additions & 0 deletions src/lib/event-log.c
Expand Up @@ -7,6 +7,7 @@

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;

#undef e_error
void e_error(struct event *event,
Expand Down Expand Up @@ -120,6 +121,10 @@ event_want_debug_log(struct event *event, const char *source_filename,
event_filter_match_source(global_debug_log_filter, event,
source_filename, source_linenum, &ctx))
return TRUE;
if (global_core_log_filter != NULL &&
event_filter_match_source(global_core_log_filter, event,
source_filename, source_linenum, &ctx))
return TRUE;
return FALSE;
}

Expand Down Expand Up @@ -167,6 +172,11 @@ event_logv_type(struct event *event, enum log_type log_type,
str_vprintfa(log_prefix_str, fmt, args);
event_send(event, &ctx, "%s", str_c(log_prefix_str));
}
if (global_core_log_filter != NULL &&
event_filter_match_source(global_core_log_filter, event,
event->source_filename,
event->source_linenum, &ctx))
abort();
errno = old_errno;
}

Expand Down Expand Up @@ -229,3 +239,21 @@ void event_unset_global_debug_send_filter(void)
if (global_debug_send_filter != NULL)
event_filter_unref(&global_debug_send_filter);
}

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);
}

struct event_filter *event_get_global_core_log_filter(void)
{
return global_core_log_filter;
}

void event_unset_global_core_log_filter(void)
{
if (global_core_log_filter != NULL)
event_filter_unref(&global_core_log_filter);
}
7 changes: 7 additions & 0 deletions src/lib/event-log.h
Expand Up @@ -75,4 +75,11 @@ struct event_filter *event_get_global_debug_send_filter(void);
/* Unset global debug send filter, if one exists. */
void event_unset_global_debug_send_filter(void);

/* Set/replace the global core filter, which abort()s on matching events. */
void event_set_global_core_log_filter(struct event_filter *filter);
/* Return the current global core filter. */
struct event_filter *event_get_global_core_log_filter(void);
/* Unset the global core filter, if one exists. */
void event_unset_global_core_log_filter(void);

#endif

0 comments on commit edddfbd

Please sign in to comment.