When matching enablers with events, first check against all excluders of the enabler. If the event matches with any of the excluders, then the event does not match with the enabler.
Signed-off-by: JP Ikaheimonen <[email protected]> --- liblttng-ust/lttng-events.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/liblttng-ust/lttng-events.c b/liblttng-ust/lttng-events.c index 915cffb..fa5596c 100644 --- a/liblttng-ust/lttng-events.c +++ b/liblttng-ust/lttng-events.c @@ -491,6 +491,29 @@ static int lttng_desc_match_enabler(const struct lttng_event_desc *desc, struct lttng_enabler *enabler) { + struct lttng_ust_excluder_node *excluder; + + /* If event matches with an excluder, return 'does not match' */ + cds_list_for_each_entry(excluder, &enabler->excluder_head, node) { + int found = 0; + int count, len; + char *excluder_name; + + for (count = 0; count < excluder->excluder.count; count++) { + excluder_name = (char *)(excluder->excluder.names) + + count * LTTNG_UST_SYM_NAME_LEN; + len = strnlen(excluder_name, LTTNG_UST_SYM_NAME_LEN); + if (len > 0 && excluder_name[len - 1] == '*') { + found = strncmp(desc->name, excluder_name, len - 1); + } else { + found = strncmp(desc->name, excluder_name, + LTTNG_UST_SYM_NAME_LEN - 1); + } + if (!found) { + return 0; + } + } + } switch (enabler->type) { case LTTNG_ENABLER_WILDCARD: return lttng_desc_match_wildcard_enabler(desc, enabler); -- 1.8.1.2 _______________________________________________ lttng-dev mailing list [email protected] http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev
