Remove unused kernel session variable in event.c
[lttng-tools.git] / src / bin / lttng-sessiond / cmd.c
index aaa5a8923332bb39ed3b43a8ecdc5688880206dd..5ec65b78637beaf0904a1c32ef1d25377dbcdc11 100644 (file)
@@ -152,6 +152,7 @@ static void list_lttng_channels(int domain, struct ltt_session *session,
                struct lttng_ht_iter iter;
                struct ltt_ust_channel *uchan;
 
+               rcu_read_lock();
                cds_lfht_for_each_entry(session->ust_session->domain_global.channels->ht,
                                &iter.iter, uchan, node.node) {
                        strncpy(channels[i].name, uchan->name, LTTNG_SYMBOL_NAME_LEN);
@@ -171,6 +172,7 @@ static void list_lttng_channels(int domain, struct ltt_session *session,
                        }
                        i++;
                }
+               rcu_read_unlock();
                break;
        }
        default:
@@ -433,6 +435,8 @@ static int init_kernel_tracing(struct ltt_kernel_session *session)
 
        assert(session);
 
+       rcu_read_lock();
+
        if (session->consumer_fds_sent == 0 && session->consumer != NULL) {
                cds_lfht_for_each_entry(session->consumer->socks->ht, &iter.iter,
                                socket, node.node) {
@@ -450,6 +454,7 @@ static int init_kernel_tracing(struct ltt_kernel_session *session)
        }
 
 error:
+       rcu_read_unlock();
        return ret;
 }
 
@@ -558,7 +563,7 @@ static int send_consumer_relayd_socket(int domain, struct ltt_session *session,
 
        /* Send relayd socket to consumer. */
        ret = consumer_send_relayd_socket(consumer_sock, sock,
-                       consumer, relayd_uri->stype);
+                       consumer, relayd_uri->stype, session->id);
        if (ret < 0) {
                ret = LTTNG_ERR_ENABLE_CONSUMER_FAIL;
                goto close_sock;
@@ -643,6 +648,8 @@ static int setup_relayd(struct ltt_session *session)
 
        DBG2("Setting relayd for session %s", session->name);
 
+       rcu_read_lock();
+
        if (usess && usess->consumer && usess->consumer->type == CONSUMER_DST_NET
                        && usess->consumer->enabled) {
                /* For each consumer socket, send relayd sockets */
@@ -679,6 +686,7 @@ static int setup_relayd(struct ltt_session *session)
        }
 
 error:
+       rcu_read_unlock();
        return ret;
 }
 
@@ -916,7 +924,7 @@ int cmd_disable_event(struct ltt_session *session, int domain,
                        goto error;
                }
 
-               ret = event_kernel_disable_tracepoint(ksess, kchan, event_name);
+               ret = event_kernel_disable_tracepoint(kchan, event_name);
                if (ret != LTTNG_OK) {
                        goto error;
                }
@@ -985,7 +993,7 @@ int cmd_disable_event_all(struct ltt_session *session, int domain,
                        goto error;
                }
 
-               ret = event_kernel_disable_all(ksess, kchan);
+               ret = event_kernel_disable_all(kchan);
                if (ret != LTTNG_OK) {
                        goto error;
                }
@@ -1111,7 +1119,7 @@ int cmd_enable_event(struct ltt_session *session, int domain,
                char *channel_name, struct lttng_event *event,
                struct lttng_filter_bytecode *filter, int wpipe)
 {
-       int ret;
+       int ret, channel_created = 0;
        struct lttng_channel *attr;
 
        assert(session);
@@ -1139,6 +1147,8 @@ int cmd_enable_event(struct ltt_session *session, int domain,
                                goto error;
                        }
                        free(attr);
+
+                       channel_created = 1;
                }
 
                /* Get the newly created kernel channel pointer */
@@ -1150,9 +1160,12 @@ int cmd_enable_event(struct ltt_session *session, int domain,
                        goto error;
                }
 
-               ret = event_kernel_enable_tracepoint(session->kernel_session, kchan,
-                               event);
+               ret = event_kernel_enable_tracepoint(kchan, event);
                if (ret != LTTNG_OK) {
+                       if (channel_created) {
+                               /* Let's not leak a useless channel. */
+                               kernel_destroy_channel(kchan);
+                       }
                        goto error;
                }
 
@@ -1260,21 +1273,18 @@ int cmd_enable_event_all(struct ltt_session *session, int domain,
 
                switch (event_type) {
                case LTTNG_EVENT_SYSCALL:
-                       ret = event_kernel_enable_all_syscalls(session->kernel_session,
-                                       kchan, kernel_tracer_fd);
+                       ret = event_kernel_enable_all_syscalls(kchan, kernel_tracer_fd);
                        break;
                case LTTNG_EVENT_TRACEPOINT:
                        /*
                         * This call enables all LTTNG_KERNEL_TRACEPOINTS and
                         * events already registered to the channel.
                         */
-                       ret = event_kernel_enable_all_tracepoints(session->kernel_session,
-                                       kchan, kernel_tracer_fd);
+                       ret = event_kernel_enable_all_tracepoints(kchan, kernel_tracer_fd);
                        break;
                case LTTNG_EVENT_ALL:
                        /* Enable syscalls and tracepoints */
-                       ret = event_kernel_enable_all(session->kernel_session,
-                                       kchan, kernel_tracer_fd);
+                       ret = event_kernel_enable_all(kchan, kernel_tracer_fd);
                        break;
                default:
                        ret = LTTNG_ERR_KERN_ENABLE_FAIL;
@@ -1283,6 +1293,10 @@ int cmd_enable_event_all(struct ltt_session *session, int domain,
 
                /* Manage return value */
                if (ret != LTTNG_OK) {
+                       /*
+                        * On error, cmd_enable_channel call will take care of destroying
+                        * the created channel if it was needed.
+                        */
                        goto error;
                }
 
This page took 0.025347 seconds and 4 git commands to generate.