+/*
+ * ust_create_trace
+ *
+ * Create an userspace trace using pid.
+ * This trace is then appended to the current session
+ * ust trace list.
+ */
+static int ust_create_trace(pid_t pid)
+{
+ int sock, ret;
+ struct ltt_ust_trace *trace;
+
+ trace = malloc(sizeof(struct ltt_ust_trace));
+ if (trace == NULL) {
+ perror("malloc");
+ ret = -1;
+ goto error;
+ }
+
+ /* Init */
+ trace->pid = pid;
+ trace->shmid = 0;
+
+ /* Connect to app using ustctl API */
+ sock = connect_app(pid);
+ if (sock < 0) {
+ ret = LTTCOMM_NO_TRACEABLE;
+ goto error;
+ }
+
+ ret = ustctl_create_trace(sock, "auto");
+ if (ret < 0) {
+ ret = LTTCOMM_CREATE_FAIL;
+ goto error;
+ }
+
+ /* Check if current session is valid */
+ if (current_session) {
+ cds_list_add(&trace->list, ¤t_session->ust_traces);
+ }
+
+error:
+ return ret;
+}
+