Fix bad return value on enable syscalls making it freeze
[lttng-tools.git] / lttng-sessiond / main.c
index 7e4000a0fd1183365a9ccc7746e47297f0cb9d66..75732a334c376cb5a0b5c7fd666c10ffc3cbccde 100644 (file)
@@ -1532,7 +1532,7 @@ static pid_t spawn_consumerd(struct consumer_data *consumer_data)
                        break;
                case LTTNG_CONSUMER64_UST:
                {
-                       char *tmpnew;
+                       char *tmpnew = NULL;
 
                        if (consumerd64_libdir[0] != '\0') {
                                char *tmp;
@@ -2073,6 +2073,11 @@ static int list_lttng_ust_global_events(char *channel_name,
                case LTTNG_UST_FUNCTION:
                        tmp[i].type = LTTNG_EVENT_FUNCTION;
                        break;
+               case LTTNG_UST_TRACEPOINT_LOGLEVEL:
+                       /* TODO */
+                       ret = -LTTCOMM_NOT_IMPLEMENTED;
+                       goto error;
+                       break;
                }
                i++;
        }
@@ -2191,6 +2196,12 @@ static int cmd_disable_channel(struct ltt_session *session,
                        goto error;
                }
 
+               /* Already disabled */
+               if (!uchan->enabled) {
+                       DBG2("UST channel %s already disabled", channel_name);
+                       break;
+               }
+
                ret = ust_app_disable_channel_glb(usess, uchan);
                if (ret < 0) {
                        ret = LTTCOMM_UST_DISABLE_FAIL;
@@ -2299,28 +2310,32 @@ static int cmd_enable_channel(struct ltt_session *session,
                                goto error;
                        }
 
-                       rcu_read_lock();
-                       hashtable_add_unique(usess->domain_global.channels, &uchan->node);
-                       rcu_read_unlock();
-                       DBG2("UST channel %s added to global domain HT", attr->name);
-
                        /* Add channel to all registered applications */
                        ret = ust_app_create_channel_glb(usess, uchan);
                        if (ret != 0) {
                                ret = LTTCOMM_UST_CHAN_FAIL;
                                goto error;
                        }
+
+                       rcu_read_lock();
+                       hashtable_add_unique(usess->domain_global.channels, &uchan->node);
+                       rcu_read_unlock();
+
+                       DBG2("UST channel %s added to global domain HT", attr->name);
                } else {
                        /* If already enabled, everything is OK */
                        if (uchan->enabled) {
-                               ret = LTTCOMM_OK;
-                               goto error;
+                               break;
                        }
 
                        ret = ust_app_enable_channel_glb(usess, uchan);
                        if (ret < 0) {
-                               ret = LTTCOMM_UST_ENABLE_FAIL;
-                               goto error;
+                               if (ret != -EEXIST) {
+                                       ret = LTTCOMM_UST_CHAN_ENABLE_FAIL;
+                                       goto error;
+                               } else {
+                                       ret = LTTCOMM_OK;
+                               }
                        }
                }
 
@@ -2509,21 +2524,18 @@ static int cmd_add_context(struct ltt_session *session, int domain,
                break;
        case LTTNG_DOMAIN_UST:
        {
-               /*
-               struct ltt_ust_session *usess;
+               struct ltt_ust_session *usess = session->ust_session;
 
-               cds_list_for_each_entry(usess, &session->ust_session_list.head, list) {
-                       ret = context_ust_add(usess, ctx,
-                                       event_name, channel_name, domain);
-                       if (ret != LTTCOMM_OK) {
-                               goto error;
-                       }
+               ret = context_ust_add(usess, domain, ctx, event_name, channel_name);
+               if (ret != LTTCOMM_OK) {
+                       goto error;
                }
                break;
-               */
        }
+       case LTTNG_DOMAIN_UST_EXEC_NAME:
+       case LTTNG_DOMAIN_UST_PID:
+       case LTTNG_DOMAIN_UST_PID_FOLLOW_CHILDREN:
        default:
-               /* TODO: UST other domains */
                ret = LTTCOMM_NOT_IMPLEMENTED;
                goto error;
        }
@@ -2665,15 +2677,16 @@ static int cmd_enable_event_all(struct ltt_session *session, int domain,
                        if (ret != LTTCOMM_OK) {
                                goto error;
                        }
-               }
 
-               /* Get the newly created kernel channel pointer */
-               kchan = trace_kernel_get_channel_by_name(channel_name,
-                               session->kernel_session);
-               if (kchan == NULL) {
-                       /* This sould not happen... */
-                       ret = LTTCOMM_FATAL;
-                       goto error;
+                       /* Get the newly created kernel channel pointer */
+                       kchan = trace_kernel_get_channel_by_name(channel_name,
+                                       session->kernel_session);
+                       if (kchan == NULL) {
+                               /* This sould not happen... */
+                               ret = LTTCOMM_FATAL;
+                               goto error;
+                       }
+
                }
 
                switch (event_type) {
@@ -2698,6 +2711,8 @@ static int cmd_enable_event_all(struct ltt_session *session, int domain,
                        ret = LTTCOMM_KERN_ENABLE_FAIL;
                        goto error;
                }
+
+               /* Manage return value */
                if (ret != LTTCOMM_OK) {
                        goto error;
                }
This page took 0.024357 seconds and 4 git commands to generate.