Fix: include loglevel type in agent event's primary key
[lttng-tools.git] / src / bin / lttng-sessiond / event.c
index 85b41bed001f2ae5bfbe9f661ece22ea54d21e9d..06a683658510d7db5ea6f4d63aba317f37d75886 100644 (file)
@@ -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,
@@ -207,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;
@@ -359,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;
@@ -370,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;
        }
@@ -396,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;
@@ -406,18 +408,20 @@ 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);
+       aevent = agent_find_event(event->name, event->loglevel_type,
+               event->loglevel, agt);
        if (!aevent) {
-               aevent = agent_create_event(event->name, filter);
+               aevent = agent_create_event(event->name, event->loglevel_type,
+                               event->loglevel, filter,
+                               filter_expression);
                if (!aevent) {
                        ret = LTTNG_ERR_NOMEM;
                        goto error;
                }
-               aevent->loglevel = event->loglevel;
-               aevent->loglevel_type = event->loglevel_type;
                created = 1;
        }
 
@@ -531,12 +535,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);
 
This page took 0.024336 seconds and 4 git commands to generate.