Move stream name creation to fct create_ust_stream
authorDavid Goulet <dgoulet@efficios.com>
Mon, 21 Jan 2013 17:03:55 +0000 (12:03 -0500)
committerDavid Goulet <dgoulet@efficios.com>
Mon, 21 Jan 2013 17:03:55 +0000 (12:03 -0500)
This is for two reasons. First, to avoid for the caller to create the
stream name. Second, on snprintf() error, we can't continue so put back
the reserved FDs and return an error.

We do that name creation now *before* the stream is created on the
application side so we don't have to release that object on error.

Only after that the stream is added to the list and the channel count
updated. This makes more sense and better handle the error path. Also,
this patch removes a XXX: statement which are always not cool on
production software :).

Signed-off-by: David Goulet <dgoulet@efficios.com>
src/bin/lttng-sessiond/ust-app.c

index c1e7e3935d52a4594989f0dce261919d730d6568..374360e48c365937a20952e6623e356e21fae41c 100644 (file)
@@ -777,6 +777,20 @@ 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);
        ret = ustctl_create_stream(app->sock, ua_chan->obj, &stream->obj);
        if (ret < 0) {
                lttng_fd_put(LTTNG_FD_APPS, 2);
@@ -2371,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.040502 seconds and 4 git commands to generate.