Fix: ownership of filter and filter_expression
[lttng-tools.git] / src / bin / lttng-sessiond / event.c
index 0efdc9253d59adc98da8508c8909b9a6d9e58f06..bedaa2e2f4e220e63c6458a1c7947aaa9081b3a3 100644 (file)
@@ -129,7 +129,8 @@ int event_kernel_disable_event_all(struct ltt_kernel_channel *kchan)
  * We own filter_expression and filter.
  */
 int event_kernel_enable_event(struct ltt_kernel_channel *kchan,
-               struct lttng_event *event)
+               struct lttng_event *event, char *filter_expression,
+               struct lttng_filter_bytecode *filter)
 {
        int ret;
        struct ltt_kernel_event *kevent;
@@ -137,10 +138,14 @@ int event_kernel_enable_event(struct ltt_kernel_channel *kchan,
        assert(kchan);
        assert(event);
 
-       kevent = trace_kernel_get_event_by_name(event->name, kchan,
-                       event->type);
+       kevent = trace_kernel_find_event(event->name, kchan,
+                       event->type, filter);
        if (kevent == NULL) {
-               ret = kernel_create_event(event, kchan);
+               ret = kernel_create_event(event, kchan,
+                       filter_expression, filter);
+               /* We have passed ownership */
+               filter_expression = NULL;
+               filter = NULL;
                if (ret < 0) {
                        switch (-ret) {
                        case EEXIST:
@@ -169,6 +174,8 @@ int event_kernel_enable_event(struct ltt_kernel_channel *kchan,
 
        ret = LTTNG_OK;
 end:
+       free(filter_expression);
+       free(filter);
        return ret;
 }
 
This page took 0.024997 seconds and 5 git commands to generate.