X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fevent.c;h=71b66a8468cd06410ca3e277fa63750d9b0780df;hb=b953b8cd56dbdc30e9228a7334c6e5fbe302cfc7;hp=017efa1d5a7d2fd7bd86ac48aa0efb42444b562f;hpb=be42c96885c522f857f146fa6f7ae53856e3bed2;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/event.c b/src/bin/lttng-sessiond/event.c index 017efa1d5..71b66a846 100644 --- a/src/bin/lttng-sessiond/event.c +++ b/src/bin/lttng-sessiond/event.c @@ -50,7 +50,8 @@ static void add_unique_ust_event(struct lttng_ht *ht, key.name = event->attr.name; key.filter = (struct lttng_filter_bytecode *) event->filter; - key.loglevel = event->attr.loglevel; + key.loglevel_type = event->attr.loglevel_type; + key.loglevel_value = event->attr.loglevel; key.exclusion = event->exclusion; node_ptr = cds_lfht_add_unique(ht->ht, @@ -194,7 +195,8 @@ int event_ust_enable_tracepoint(struct ltt_ust_session *usess, struct ltt_ust_channel *uchan, struct lttng_event *event, char *filter_expression, struct lttng_filter_bytecode *filter, - struct lttng_event_exclusion *exclusion) + struct lttng_event_exclusion *exclusion, + bool internal_event) { int ret = LTTNG_OK, to_create = 0; struct ltt_ust_event *uevent; @@ -206,10 +208,10 @@ int event_ust_enable_tracepoint(struct ltt_ust_session *usess, rcu_read_lock(); uevent = trace_ust_find_event(uchan->events, event->name, filter, - event->loglevel, exclusion); - if (uevent == NULL) { + event->loglevel_type, event->loglevel, exclusion); + if (!uevent) { uevent = trace_ust_create_event(event, filter_expression, - filter, exclusion); + filter, exclusion, internal_event); /* We have passed ownership */ filter_expression = NULL; filter = NULL; @@ -358,7 +360,7 @@ error: */ int event_agent_enable_all(struct ltt_ust_session *usess, struct agent *agt, struct lttng_event *event, - struct lttng_filter_bytecode *filter) + struct lttng_filter_bytecode *filter ,char *filter_expression) { int ret; struct agent_event *aevent; @@ -369,7 +371,7 @@ int event_agent_enable_all(struct ltt_ust_session *usess, DBG("Event agent enabling ALL events for session %" PRIu64, usess->id); /* Enable event on agent application through TCP socket. */ - ret = event_agent_enable(usess, agt, event, filter); + ret = event_agent_enable(usess, agt, event, filter, filter_expression); if (ret != LTTNG_OK) { goto error; } @@ -395,7 +397,8 @@ error: */ int event_agent_enable(struct ltt_ust_session *usess, struct agent *agt, struct lttng_event *event, - struct lttng_filter_bytecode *filter) + struct lttng_filter_bytecode *filter, + char *filter_expression) { int ret, created = 0; struct agent_event *aevent; @@ -405,18 +408,19 @@ int event_agent_enable(struct ltt_ust_session *usess, assert(agt); DBG("Event agent enabling %s for session %" PRIu64 " with loglevel type %d " - "and loglevel %d", event->name, usess->id, event->loglevel_type, - event->loglevel); + ", loglevel %d and filter \"%s\"", event->name, + usess->id, event->loglevel_type, event->loglevel, + filter_expression ? filter_expression : "NULL"); aevent = agent_find_event(event->name, event->loglevel, agt); if (!aevent) { - aevent = agent_create_event(event->name, filter); + aevent = agent_create_event(event->name, event->loglevel, + event->loglevel_type, filter, + filter_expression); if (!aevent) { ret = LTTNG_ERR_NOMEM; goto error; } - aevent->loglevel = event->loglevel; - aevent->loglevel_type = event->loglevel_type; created = 1; } @@ -530,12 +534,13 @@ int event_agent_disable(struct ltt_ust_session *usess, struct agent *agt, } /* - * The loglevel is hardcoded with 0 here since the agent ust event is set - * with the loglevel type to ALL thus the loglevel stays 0. The event's - * filter is the one handling the loglevel for agent. + * Agent UST event has its loglevel type forced to + * LTTNG_UST_LOGLEVEL_ALL. The actual loglevel type/value filtering + * happens thanks to an UST filter. The following -1 is actually + * ignored since the type is LTTNG_UST_LOGLEVEL_ALL. */ uevent = trace_ust_find_event(uchan->events, (char *) ust_event_name, - aevent->filter, 0, NULL); + aevent->filter, LTTNG_UST_LOGLEVEL_ALL, -1, NULL); /* If the agent event exists, it must be available on the UST side. */ assert(uevent);