Move stream name creation to fct create_ust_stream
[lttng-tools.git] / src / bin / lttng-sessiond / ust-app.c
index 8f7db8f2ccbda06e5584a93f332576b70a62b9a9..374360e48c365937a20952e6623e356e21fae41c 100644 (file)
@@ -739,6 +739,7 @@ static int create_ust_metadata_stream(struct ust_app *app,
        ret = ustctl_create_stream(app->sock, ua_sess->metadata->obj,
                        &ua_sess->metadata->stream_obj);
        if (ret < 0) {
        ret = ustctl_create_stream(app->sock, ua_sess->metadata->obj,
                        &ua_sess->metadata->stream_obj);
        if (ret < 0) {
+               lttng_fd_put(LTTNG_FD_APPS, 2);
                ERR("UST create metadata stream failed");
                goto error;
        }
                ERR("UST create metadata stream failed");
                goto error;
        }
@@ -776,11 +777,25 @@ static int create_ust_stream(struct ust_app *app,
                goto error;
        }
 
                goto error;
        }
 
+       /*
+        * Set the stream name before creating it. On error, we don't have to
+        * delete it on the tracer side.
+        */
+       ret = snprintf(stream->name, sizeof(stream->name), "%s_%u",
+                       ua_chan->name, ua_chan->streams.count);
+       if (ret < 0) {
+               /* Without the stream name we can't continue using it. */
+               PERROR("snprintf UST create stream");
+               /* Just to make sure we never return -ENOENT. */
+               ret = -1;
+               goto error;
+       }
+
        ret = ustctl_create_stream(app->sock, ua_chan->obj, &stream->obj);
        if (ret < 0) {
                lttng_fd_put(LTTNG_FD_APPS, 2);
                /* Indicates that there is no more stream for that channel. */
        ret = ustctl_create_stream(app->sock, ua_chan->obj, &stream->obj);
        if (ret < 0) {
                lttng_fd_put(LTTNG_FD_APPS, 2);
                /* Indicates that there is no more stream for that channel. */
-               if (ret != -ENOENT) {
+               if (ret != -LTTNG_UST_ERR_NOENT) {
                        ERR("UST create metadata stream failed (ret: %d)", ret);
                }
                goto error;
                        ERR("UST create metadata stream failed (ret: %d)", ret);
                }
                goto error;
@@ -2359,7 +2374,7 @@ int ust_app_start_trace(struct ltt_ust_session *usess, struct ust_app *app)
                        if (ret < 0) {
                                /* Free unused memory after this point. */
                                free(ustream);
                        if (ret < 0) {
                                /* Free unused memory after this point. */
                                free(ustream);
-                               if (ret == -ENOENT) {
+                               if (ret == -LTTNG_UST_ERR_NOENT) {
                                        /* Got all streams. Continue normal execution. */
                                        break;
                                }
                                        /* Got all streams. Continue normal execution. */
                                        break;
                                }
@@ -2370,19 +2385,10 @@ int ust_app_start_trace(struct ltt_ust_session *usess, struct ust_app *app)
 
                        health_code_update(&health_thread_cmd);
 
 
                        health_code_update(&health_thread_cmd);
 
-                       /* Order is important */
+                       /* Order is important this is why a list is used. */
                        cds_list_add_tail(&ustream->list, &ua_chan->streams.head);
                        cds_list_add_tail(&ustream->list, &ua_chan->streams.head);
-                       ret = snprintf(ustream->name, sizeof(ustream->name), "%s_%u",
-                                       ua_chan->name, ua_chan->streams.count);
                        ua_chan->streams.count++;
                        ua_chan->streams.count++;
-                       if (ret < 0) {
-                               PERROR("asprintf UST create stream");
-                               /*
-                                * XXX what should we do here with the
-                                * stream ?
-                                */
-                               continue;
-                       }
+
                        DBG2("UST stream %d ready (handle: %d)", ua_chan->streams.count,
                                        ustream->handle);
                }
                        DBG2("UST stream %d ready (handle: %d)", ua_chan->streams.count,
                                        ustream->handle);
                }
This page took 0.023991 seconds and 4 git commands to generate.