Fix: error handling in kernel add_channel
[lttng-tools.git] / src / bin / lttng-sessiond / cmd.c
index f130f5ebfb17f74f10ec87b1d784359504e99d63..cbf2bceff27908a164128ce27328459b4e5cfadf 100644 (file)
@@ -110,7 +110,7 @@ static int build_network_session_path(char *dst, size_t size,
                                tmp_urls, kdata_port, tmp_uurl, udata_port);
        } else {
                int dport;
-               if (kuri) {
+               if (kuri || (!kuri && !uuri)) {
                        dport = kdata_port;
                } else {
                        /* No kernel URI, use the UST port. */
@@ -397,7 +397,7 @@ static int add_uri_to_consumer(struct consumer_output *consumer,
                /* Set URI into consumer output object */
                ret = consumer_set_network_uri(consumer, uri);
                if (ret < 0) {
-                       ret = LTTNG_ERR_FATAL;
+                       ret = -ret;
                        goto error;
                } else if (ret == 1) {
                        /*
@@ -438,6 +438,8 @@ static int add_uri_to_consumer(struct consumer_output *consumer,
                break;
        }
 
+       ret = LTTNG_OK;
+
 error:
        return ret;
 }
@@ -752,7 +754,7 @@ static int start_kernel_session(struct ltt_kernel_session *ksess, int wpipe)
 
        /* Setup kernel consumer socket and send fds to it */
        ret = init_kernel_tracing(ksess);
-       if (ret < 0) {
+       if (ret != 0) {
                ret = LTTNG_ERR_KERN_START_FAIL;
                goto error;
        }
@@ -1104,7 +1106,7 @@ int cmd_add_context(struct ltt_session *session, int domain,
                if (chan_count == 0) {
                        struct lttng_channel *attr;
                        /* Create default channel */
-                       attr = channel_new_default_attr(domain);
+                       attr = channel_new_default_attr(domain, usess->buffer_type);
                        if (attr == NULL) {
                                ret = LTTNG_ERR_FATAL;
                                goto error;
@@ -1164,7 +1166,8 @@ int cmd_enable_event(struct ltt_session *session, struct lttng_domain *domain,
                kchan = trace_kernel_get_channel_by_name(channel_name,
                                session->kernel_session);
                if (kchan == NULL) {
-                       attr = channel_new_default_attr(LTTNG_DOMAIN_KERNEL);
+                       attr = channel_new_default_attr(LTTNG_DOMAIN_KERNEL,
+                                       LTTNG_BUFFER_GLOBAL);
                        if (attr == NULL) {
                                ret = LTTNG_ERR_FATAL;
                                goto error;
@@ -1214,7 +1217,8 @@ int cmd_enable_event(struct ltt_session *session, struct lttng_domain *domain,
                                channel_name);
                if (uchan == NULL) {
                        /* Create default channel */
-                       attr = channel_new_default_attr(LTTNG_DOMAIN_UST);
+                       attr = channel_new_default_attr(LTTNG_DOMAIN_UST,
+                                       usess->buffer_type);
                        if (attr == NULL) {
                                ret = LTTNG_ERR_FATAL;
                                goto error;
@@ -1284,7 +1288,8 @@ int cmd_enable_event_all(struct ltt_session *session,
                                session->kernel_session);
                if (kchan == NULL) {
                        /* Create default channel */
-                       attr = channel_new_default_attr(LTTNG_DOMAIN_KERNEL);
+                       attr = channel_new_default_attr(LTTNG_DOMAIN_KERNEL,
+                                       LTTNG_BUFFER_GLOBAL);
                        if (attr == NULL) {
                                ret = LTTNG_ERR_FATAL;
                                goto error;
@@ -1348,7 +1353,8 @@ int cmd_enable_event_all(struct ltt_session *session,
                                channel_name);
                if (uchan == NULL) {
                        /* Create default channel */
-                       attr = channel_new_default_attr(LTTNG_DOMAIN_UST);
+                       attr = channel_new_default_attr(LTTNG_DOMAIN_UST,
+                                       usess->buffer_type);
                        if (attr == NULL) {
                                ret = LTTNG_ERR_FATAL;
                                goto error;
@@ -1646,7 +1652,7 @@ int cmd_set_consumer_uri(int domain, struct ltt_session *session,
 
        for (i = 0; i < nb_uri; i++) {
                ret = add_uri_to_consumer(consumer, &uris[i], domain, session->name);
-               if (ret < 0) {
+               if (ret != LTTNG_OK) {
                        goto error;
                }
        }
@@ -1665,7 +1671,6 @@ int cmd_create_session_uri(char *name, struct lttng_uri *uris,
                size_t nb_uri, lttng_sock_cred *creds)
 {
        int ret;
-       char *path = NULL;
        struct ltt_session *session;
 
        assert(name);
@@ -1690,7 +1695,7 @@ int cmd_create_session_uri(char *name, struct lttng_uri *uris,
        }
 
        /* Create tracing session in the registry */
-       ret = session_create(name, path, LTTNG_SOCK_GET_UID_CRED(creds),
+       ret = session_create(name, LTTNG_SOCK_GET_UID_CRED(creds),
                        LTTNG_SOCK_GET_GID_CRED(creds));
        if (ret != LTTNG_OK) {
                goto session_error;
@@ -1826,7 +1831,7 @@ int cmd_register_consumer(struct ltt_session *session, int domain,
                const char *sock_path, struct consumer_data *cdata)
 {
        int ret, sock;
-       struct consumer_socket *socket;
+       struct consumer_socket *socket = NULL;
 
        assert(session);
        assert(cdata);
@@ -1886,9 +1891,12 @@ int cmd_register_consumer(struct ltt_session *session, int domain,
                goto error;
        }
 
-       ret = LTTNG_OK;
+       return LTTNG_OK;
 
 error:
+       if (socket) {
+               consumer_destroy_socket(socket);
+       }
        return ret;
 }
 
@@ -2064,9 +2072,9 @@ void cmd_list_lttng_sessions(struct lttng_session *sessions, uid_t uid,
                                (ksess && ksess->consumer->type == CONSUMER_DST_NET) ||
                                (usess && usess->consumer->type == CONSUMER_DST_NET)) {
                        ret = build_network_session_path(sessions[i].path,
-                                       sizeof(session[i].path), session);
+                                       sizeof(sessions[i].path), session);
                } else {
-                       ret = snprintf(sessions[i].path, sizeof(session[i].path), "%s",
+                       ret = snprintf(sessions[i].path, sizeof(sessions[i].path), "%s",
                                        session->consumer->dst.trace_path);
                }
                if (ret < 0) {
This page took 0.025676 seconds and 4 git commands to generate.