X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fcommon%2Fevent-rule%2Ftracepoint.c;h=691ebdc117928b503ea9c000aa904cc928ee030c;hb=6296f20cf714d4f575be5bd75c3d489893809f65;hp=fbe1fc4bc8e1e7e62fc5534f40d18a47b5e1f61a;hpb=85b053182c4e300c717483ad231f5c04cbf5e4b7;p=lttng-tools.git diff --git a/src/common/event-rule/tracepoint.c b/src/common/event-rule/tracepoint.c index fbe1fc4bc..691ebdc11 100644 --- a/src/common/event-rule/tracepoint.c +++ b/src/common/event-rule/tracepoint.c @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -284,7 +285,7 @@ static int generate_agent_filter( assert(rule); assert(_agent_filter); - status = lttng_event_rule_tracepoint_get_pattern(rule, &pattern); + status = lttng_event_rule_tracepoint_get_name_pattern(rule, &pattern); if (status != LTTNG_EVENT_RULE_STATUS_OK) { ret = -1; goto end; @@ -726,7 +727,7 @@ struct lttng_event_rule *lttng_event_rule_tracepoint_create( destroy_lttng_exclusions_element); /* Default pattern is '*'. */ - status = lttng_event_rule_tracepoint_set_pattern(rule, "*"); + status = lttng_event_rule_tracepoint_set_name_pattern(rule, "*"); if (status != LTTNG_EVENT_RULE_STATUS_OK) { lttng_event_rule_destroy(rule); rule = NULL; @@ -894,7 +895,7 @@ skip_log_level_rule: offset += *exclusion_len; } - status = lttng_event_rule_tracepoint_set_pattern(rule, pattern); + status = lttng_event_rule_tracepoint_set_name_pattern(rule, pattern); if (status != LTTNG_EVENT_RULE_STATUS_OK) { ERR("Failed to set event rule tracepoint pattern."); ret = -1; @@ -931,7 +932,7 @@ end: return ret; } -enum lttng_event_rule_status lttng_event_rule_tracepoint_set_pattern( +enum lttng_event_rule_status lttng_event_rule_tracepoint_set_name_pattern( struct lttng_event_rule *rule, const char *pattern) { char *pattern_copy = NULL; @@ -952,6 +953,9 @@ enum lttng_event_rule_status lttng_event_rule_tracepoint_set_pattern( goto end; } + /* Normalize the pattern. */ + strutils_normalize_star_glob_pattern(pattern_copy); + free(tracepoint->pattern); tracepoint->pattern = pattern_copy; @@ -960,7 +964,7 @@ end: return status; } -enum lttng_event_rule_status lttng_event_rule_tracepoint_get_pattern( +enum lttng_event_rule_status lttng_event_rule_tracepoint_get_name_pattern( const struct lttng_event_rule *rule, const char **pattern) { struct lttng_event_rule_tracepoint *tracepoint; @@ -1117,6 +1121,27 @@ end: return valid; } +static bool domain_supports_log_levels(enum lttng_domain_type domain) +{ + bool supported; + + switch (domain) { + case LTTNG_DOMAIN_KERNEL: + supported = false; + break; + case LTTNG_DOMAIN_UST: + case LTTNG_DOMAIN_JUL: + case LTTNG_DOMAIN_LOG4J: + case LTTNG_DOMAIN_PYTHON: + supported = true; + break; + default: + abort(); + } + + return supported; +} + enum lttng_event_rule_status lttng_event_rule_tracepoint_set_log_level_rule( struct lttng_event_rule *rule, const struct lttng_log_level_rule *log_level_rule) @@ -1133,6 +1158,11 @@ enum lttng_event_rule_status lttng_event_rule_tracepoint_set_log_level_rule( tracepoint = container_of( rule, struct lttng_event_rule_tracepoint, parent); + if (!domain_supports_log_levels(tracepoint->domain)) { + status = LTTNG_EVENT_RULE_STATUS_UNSUPPORTED; + goto end; + } + if (!log_level_rule_valid(log_level_rule, tracepoint->domain)) { status = LTTNG_EVENT_RULE_STATUS_INVALID; goto end;