}
/*
- * Create stream onto the UST tracer for a UST session.
+ * Create metadata stream onto the UST tracer for a given session.
*/
-static int create_ust_stream(struct ust_app *app,
+static int create_ust_metadata_stream(struct ust_app *app,
struct ust_app_session *ua_sess)
{
int ret;
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;
}
/* Open UST metadata stream */
if (ua_sess->metadata->stream_obj == NULL) {
- ret = create_ust_stream(app, ua_sess);
+ ret = create_ust_metadata_stream(app, ua_sess);
if (ret < 0) {
goto error;
}
ret = ustctl_create_stream(app->sock, ua_chan->obj,
&ustream->obj);
if (ret < 0) {
- /* Got all streams */
- lttng_fd_put(LTTNG_FD_APPS, 2);
+ /* Free unused memory and reset FD states. */
free(ustream);
+ lttng_fd_put(LTTNG_FD_APPS, 2);
+ if (ret == -LTTNG_UST_ERR_NOENT) {
+ /* Got all streams. Continue normal execution. */
+ break;
+ }
+ /* Error at this point. Stop everything. */
ret = LTTNG_ERR_UST_STREAM_FAIL;
- break;
+ goto error_rcu_unlock;
}
ustream->handle = ustream->obj->handle;
/* This start the UST tracing */
ret = ustctl_start_session(app->sock, ua_sess->handle);
if (ret < 0) {
- ERR("Error starting tracing for app pid: %d", app->pid);
+ ERR("Error starting tracing for app pid: %d (ret: %d)", app->pid, ret);
goto error_rcu_unlock;
}
/* This inhibits UST tracing */
ret = ustctl_stop_session(app->sock, ua_sess->handle);
if (ret < 0) {
- ERR("Error stopping tracing for app pid: %d", app->pid);
+ ERR("Error stopping tracing for app pid: %d (ret: %d)", app->pid, ret);
goto error_rcu_unlock;
}
/* FIXME: Should we quit here or continue... */
continue;
}
-
- ret = set_ust_event_filter(ua_event, app);
- if (ret < 0) {
- /* FIXME: Should we quit here or continue... */
- continue;
- }
}
}