From ade8d7e3958921c9ef668c17d877eaf8d5b14f3a Mon Sep 17 00:00:00 2001 From: Alexandre Montplaisir Date: Fri, 11 Sep 2015 18:38:52 -0400 Subject: [PATCH] Fix: include the filter expression in agent events' primary key MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Similar fix to a931962, but for filter expressions this time. UST events's key already includes the filter bytecode, so adding the string itself should not be needed. Signed-off-by: Alexandre Montplaisir Signed-off-by: Jérémie Galarneau --- src/bin/lttng-sessiond/agent.c | 17 +++++++++++++---- src/bin/lttng-sessiond/agent.h | 3 ++- src/bin/lttng-sessiond/event.c | 2 +- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/bin/lttng-sessiond/agent.c b/src/bin/lttng-sessiond/agent.c index eed7e68c6..e9cd5fa05 100644 --- a/src/bin/lttng-sessiond/agent.c +++ b/src/bin/lttng-sessiond/agent.c @@ -89,6 +89,12 @@ static int ht_match_event(struct cds_lfht_node *node, goto no_match; } + /* Filter expression */ + if (strncmp(event->filter_expression, key->filter_expression, + strlen(event->filter_expression)) != 0) { + goto no_match; + } + return 1; no_match: @@ -111,6 +117,7 @@ static void add_unique_agent_event(struct lttng_ht *ht, key.name = event->name; key.loglevel_value = event->loglevel_value; key.loglevel_type = event->loglevel_type; + key.filter_expression = event->filter_expression; node_ptr = cds_lfht_add_unique(ht->ht, ht->hash_fct(event->node.key, lttng_ht_seed), @@ -798,8 +805,9 @@ struct agent_event *agent_create_event(const char *name, { struct agent_event *event = NULL; - DBG3("Agent create new event with name %s, loglevel type %d and loglevel value %d", - name, loglevel_type, loglevel_value); + DBG3("Agent create new event with name %s, loglevel type %d, \ + loglevel value %d and filter %s", + name, loglevel_type, loglevel_value, filter_expression); if (!name) { ERR("Failed to create agent event; no name provided."); @@ -885,7 +893,7 @@ void agent_event_next_duplicate(const char *name, } /* - * Find a agent event in the given agent using name and loglevel. + * Find a agent event in the given agent using name, loglevel and filter. * * RCU read side lock MUST be acquired. * @@ -893,7 +901,7 @@ void agent_event_next_duplicate(const char *name, */ struct agent_event *agent_find_event(const char *name, enum lttng_loglevel_type loglevel_type, int loglevel_value, - struct agent *agt) + char *filter_expression, struct agent *agt) { struct lttng_ht_node_str *node; struct lttng_ht_iter iter; @@ -908,6 +916,7 @@ struct agent_event *agent_find_event(const char *name, key.name = name; key.loglevel_value = loglevel_value; key.loglevel_type = loglevel_type; + key.filter_expression = filter_expression; cds_lfht_lookup(ht->ht, ht->hash_fct((void *) name, lttng_ht_seed), ht_match_event, &key, &iter.iter); diff --git a/src/bin/lttng-sessiond/agent.h b/src/bin/lttng-sessiond/agent.h index 49393e809..2f3a6b95f 100644 --- a/src/bin/lttng-sessiond/agent.h +++ b/src/bin/lttng-sessiond/agent.h @@ -38,6 +38,7 @@ struct agent_ht_key { const char *name; int loglevel_value; enum lttng_loglevel_type loglevel_type; + char *filter_expression; }; /* @@ -140,7 +141,7 @@ void agent_add_event(struct agent_event *event, struct agent *agt); struct agent_event *agent_find_event(const char *name, enum lttng_loglevel_type loglevel_type, int loglevel_value, - struct agent *agt); + char *filter_expression, struct agent *agt); void agent_find_events_by_name(const char *name, struct agent *agt, struct lttng_ht_iter* iter); void agent_event_next_duplicate(const char *name, diff --git a/src/bin/lttng-sessiond/event.c b/src/bin/lttng-sessiond/event.c index 589d88eac..3606a2a6a 100644 --- a/src/bin/lttng-sessiond/event.c +++ b/src/bin/lttng-sessiond/event.c @@ -439,7 +439,7 @@ int event_agent_enable(struct ltt_ust_session *usess, filter_expression ? filter_expression : "NULL"); aevent = agent_find_event(event->name, event->loglevel_type, - event->loglevel, agt); + event->loglevel, filter_expression, agt); if (!aevent) { aevent = agent_create_event(event->name, event->loglevel_type, event->loglevel, filter, -- 2.34.1