Clean-up: Move agent_apps_ht_by_sock definition to main.c
[lttng-tools.git] / src / bin / lttng-sessiond / cmd.c
index 31c3aff77d175571a44a1f0cfdc6befdb9a6c936..11e2885411f69f6fb07325d0364aed8c891e37d1 100644 (file)
@@ -38,6 +38,7 @@
 #include "lttng-sessiond.h"
 #include "utils.h"
 #include "syscall.h"
+#include "agent.h"
 
 #include "cmd.h"
 
@@ -1167,23 +1168,28 @@ int cmd_disable_event(struct ltt_session *session, int domain,
 
                switch (event->type) {
                case LTTNG_EVENT_ALL:
-                       ret = event_kernel_disable_all(kchan);
+                       ret = event_kernel_disable_event_all(kchan);
                        if (ret != LTTNG_OK) {
                                goto error;
                        }
                        break;
-               case LTTNG_EVENT_TRACEPOINT:
+               case LTTNG_EVENT_TRACEPOINT:    /* fall-through */
+               case LTTNG_EVENT_SYSCALL:
                        if (!strcmp(event_name, "*")) {
-                               ret = event_kernel_disable_all_tracepoints(kchan);
+                               ret = event_kernel_disable_event_type(kchan,
+                                       event->type);
                        } else {
-                               ret = event_kernel_disable_tracepoint(kchan, event_name);
+                               ret = event_kernel_disable_event(kchan,
+                                       event_name);
                        }
                        if (ret != LTTNG_OK) {
                                goto error;
                        }
                        break;
-               case LTTNG_EVENT_SYSCALL:
-                       ret = event_kernel_disable_syscall(kchan, event_name);
+               case LTTNG_EVENT_PROBE:
+               case LTTNG_EVENT_FUNCTION:
+               case LTTNG_EVENT_FUNCTION_ENTRY:
+                       ret = event_kernel_disable_event(kchan, event_name);
                        if (ret != LTTNG_OK) {
                                goto error;
                        }
@@ -1480,18 +1486,51 @@ int cmd_enable_event(struct ltt_session *session, struct lttng_domain *domain,
                switch (event->type) {
                case LTTNG_EVENT_ALL:
                {
+                       char *filter_expression_a = NULL;
+                       struct lttng_filter_bytecode *filter_a = NULL;
+
+                       /*
+                        * We need to duplicate filter_expression and filter,
+                        * because ownership is passed to first enable
+                        * event.
+                        */
+                       if (filter_expression) {
+                               filter_expression_a = strdup(filter_expression);
+                               if (!filter_expression_a) {
+                                       ret = LTTNG_ERR_FATAL;
+                                       goto error;
+                               }
+                       }
+                       if (filter) {
+                               filter_a = zmalloc(sizeof(*filter_a) + filter->len);
+                               if (!filter_a) {
+                                       free(filter_expression_a);
+                                       ret = LTTNG_ERR_FATAL;
+                                       goto error;
+                               }
+                               memcpy(filter_a, filter, sizeof(*filter_a) + filter->len);
+                       }
                        event->type = LTTNG_EVENT_TRACEPOINT;   /* Hack */
-                       ret = event_kernel_enable_tracepoint(kchan, event);
+                       ret = event_kernel_enable_event(kchan, event,
+                               filter_expression, filter);
+                       /* We have passed ownership */
+                       filter_expression = NULL;
+                       filter = NULL;
                        if (ret != LTTNG_OK) {
                                if (channel_created) {
                                        /* Let's not leak a useless channel. */
                                        kernel_destroy_channel(kchan);
                                }
+                               free(filter_expression_a);
+                               free(filter_a);
                                goto error;
                        }
                        event->type = LTTNG_EVENT_SYSCALL;      /* Hack */
-                       ret = event_kernel_enable_syscall(kchan, event->name);
+                       ret = event_kernel_enable_event(kchan, event,
+                               filter_expression_a, filter_a);
                        if (ret != LTTNG_OK) {
+                               free(filter_expression_a);
+                               free(filter_a);
                                goto error;
                        }
                        break;
@@ -1500,7 +1539,11 @@ int cmd_enable_event(struct ltt_session *session, struct lttng_domain *domain,
                case LTTNG_EVENT_FUNCTION:
                case LTTNG_EVENT_FUNCTION_ENTRY:
                case LTTNG_EVENT_TRACEPOINT:
-                       ret = event_kernel_enable_tracepoint(kchan, event);
+                       ret = event_kernel_enable_event(kchan, event,
+                               filter_expression, filter);
+                       /* We have passed ownership */
+                       filter_expression = NULL;
+                       filter = NULL;
                        if (ret != LTTNG_OK) {
                                if (channel_created) {
                                        /* Let's not leak a useless channel. */
@@ -1510,7 +1553,11 @@ int cmd_enable_event(struct ltt_session *session, struct lttng_domain *domain,
                        }
                        break;
                case LTTNG_EVENT_SYSCALL:
-                       ret = event_kernel_enable_syscall(kchan, event->name);
+                       ret = event_kernel_enable_event(kchan, event,
+                               filter_expression, filter);
+                       /* We have passed ownership */
+                       filter_expression = NULL;
+                       filter = NULL;
                        if (ret != LTTNG_OK) {
                                goto error;
                        }
This page took 0.0246 seconds and 4 git commands to generate.