Fix: Only list kernel enablers when listing events
[lttng-tools.git] / src / bin / lttng-sessiond / cmd.c
index 4391b6a58c354c6445a8195c345bc7eb91b3a561..1ca9850a816cf695b2c45855778c5583458adb29 100644 (file)
@@ -365,7 +365,7 @@ static int list_lttng_kernel_events(char *channel_name,
 
        if (nb_event == 0) {
                *events = NULL;
-               goto syscall;
+               goto end;
        }
 
        *events = zmalloc(nb_event * sizeof(struct lttng_event));
@@ -414,19 +414,7 @@ static int list_lttng_kernel_events(char *channel_name,
                i++;
        }
 
-syscall:
-       if (syscall_table) {
-               ssize_t new_size;
-
-               new_size = syscall_list_channel(kchan, events, nb_event);
-               if (new_size < 0) {
-                       free(events);
-                       ret = -new_size;
-                       goto error;
-               }
-               nb_event = new_size;
-       }
-
+end:
        return nb_event;
 
 error:
@@ -1219,32 +1207,22 @@ int cmd_disable_event(struct ltt_session *session, int domain,
 
                switch (event->type) {
                case LTTNG_EVENT_ALL:
-                       ret = event_kernel_disable_event_all(kchan);
-                       if (ret != LTTNG_OK) {
-                               goto error_unlock;
-                       }
-                       break;
-               case LTTNG_EVENT_TRACEPOINT:    /* fall-through */
+               case LTTNG_EVENT_TRACEPOINT:
                case LTTNG_EVENT_SYSCALL:
-                       if (!strcmp(event_name, "*")) {
-                               ret = event_kernel_disable_event_type(kchan,
-                                       event->type);
+               case LTTNG_EVENT_PROBE:
+               case LTTNG_EVENT_FUNCTION:
+               case LTTNG_EVENT_FUNCTION_ENTRY:/* fall-through */
+                       if (event_name[0] == '\0') {
+                               ret = event_kernel_disable_event(kchan,
+                                       NULL, event->type);
                        } else {
                                ret = event_kernel_disable_event(kchan,
-                                       event_name);
+                                       event_name, event->type);
                        }
                        if (ret != LTTNG_OK) {
                                goto error_unlock;
                        }
                        break;
-               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_unlock;
-                       }
-                       break;
                default:
                        ret = LTTNG_ERR_UNK;
                        goto error_unlock;
@@ -1267,7 +1245,7 @@ int cmd_disable_event(struct ltt_session *session, int domain,
 
                /*
                 * If a non-default channel has been created in the
-                * session, explicitely require that -c chan_name needs
+                * session, explicitly require that -c chan_name needs
                 * to be provided.
                 */
                if (usess->has_non_default_channel && channel_name[0] == '\0') {
@@ -1284,10 +1262,12 @@ int cmd_disable_event(struct ltt_session *session, int domain,
 
                switch (event->type) {
                case LTTNG_EVENT_ALL:
-                       if (strlen(event->name) == 1 &&
-                                       !strncmp(event->name, "*", 1)) {
-                               ret = event_ust_disable_all_tracepoints(usess,
-                                               uchan);
+                       /*
+                        * An empty event name means that everything
+                        * should be disabled.
+                        */
+                       if (event->name[0] == '\0') {
+                               ret = event_ust_disable_all_tracepoints(usess, uchan);
                        } else {
                                ret = event_ust_disable_tracepoint(usess, uchan,
                                                event_name);
@@ -1327,8 +1307,11 @@ int cmd_disable_event(struct ltt_session *session, int domain,
                        ret = -LTTNG_ERR_UST_EVENT_NOT_FOUND;
                        goto error_unlock;
                }
-               /* The wild card * means that everything should be disabled. */
-               if (strncmp(event->name, "*", 1) == 0 && strlen(event->name) == 1) {
+               /*
+                * An empty event name means that everything
+                * should be disabled.
+                */
+               if (event->name[0] == '\0') {
                        ret = event_agent_disable_all(usess, agt);
                } else {
                        ret = event_agent_disable(usess, agt, event_name);
@@ -1745,7 +1728,9 @@ static int _cmd_enable_event(struct ltt_session *session,
                filter_expression = NULL;
                filter = NULL;
                exclusion = NULL;
-               if (ret != LTTNG_OK) {
+               if (ret == LTTNG_ERR_UST_EVENT_ENABLED) {
+                       goto already_enabled;
+               } else if (ret != LTTNG_OK) {
                        goto error;
                }
                break;
@@ -1843,7 +1828,9 @@ static int _cmd_enable_event(struct ltt_session *session,
                                        filter_copy, NULL, wpipe);
                }
 
-               if (ret != LTTNG_OK && ret != LTTNG_ERR_UST_EVENT_ENABLED) {
+               if (ret == LTTNG_ERR_UST_EVENT_ENABLED) {
+                       goto already_enabled;
+               } else if (ret != LTTNG_OK) {
                        goto error;
                }
 
@@ -1870,6 +1857,7 @@ static int _cmd_enable_event(struct ltt_session *session,
 
        ret = LTTNG_OK;
 
+already_enabled:
 error:
        free(filter_expression);
        free(filter);
This page took 0.027427 seconds and 4 git commands to generate.