From: David Goulet Date: Mon, 21 Jan 2013 17:03:55 +0000 (-0500) Subject: Move stream name creation to fct create_ust_stream X-Git-Tag: v2.2.0-rc1~102 X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=commitdiff_plain;h=7f13370536e1ad64db733423b542755c97160f4d;hp=495bbffb336c5150def4e6fe52c0a5f2f0195a2b Move stream name creation to fct create_ust_stream 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 --- diff --git a/src/bin/lttng-sessiond/ust-app.c b/src/bin/lttng-sessiond/ust-app.c index c1e7e3935..374360e48 100644 --- a/src/bin/lttng-sessiond/ust-app.c +++ b/src/bin/lttng-sessiond/ust-app.c @@ -777,6 +777,20 @@ static int create_ust_stream(struct ust_app *app, 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); @@ -2371,19 +2385,10 @@ int ust_app_start_trace(struct ltt_ust_session *usess, struct ust_app *app) 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); - ret = snprintf(ustream->name, sizeof(ustream->name), "%s_%u", - ua_chan->name, 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); }