Fix: add missing rcu lock for UST lookup
[lttng-tools.git] / src / bin / lttng-sessiond / cmd.c
index 3a70d48692917108d8ed1447b6a7a2a409542d3d..456ddeb77d85fd4d1a6f70ca7116494435a12b5e 100644 (file)
@@ -766,6 +766,8 @@ int cmd_disable_channel(struct ltt_session *session, int domain,
 
        usess = session->ust_session;
 
+       rcu_read_lock();
+
        switch (domain) {
        case LTTNG_DOMAIN_KERNEL:
        {
@@ -810,6 +812,7 @@ int cmd_disable_channel(struct ltt_session *session, int domain,
        ret = LTTNG_OK;
 
 error:
+       rcu_read_unlock();
        return ret;
 }
 
@@ -830,6 +833,8 @@ int cmd_enable_channel(struct ltt_session *session,
 
        DBG("Enabling channel %s for session %s", attr->name, session->name);
 
+       rcu_read_lock();
+
        switch (domain) {
        case LTTNG_DOMAIN_KERNEL:
        {
@@ -898,6 +903,7 @@ int cmd_enable_channel(struct ltt_session *session,
        }
 
 error:
+       rcu_read_unlock();
        return ret;
 }
 
@@ -910,6 +916,8 @@ int cmd_disable_event(struct ltt_session *session, int domain,
 {
        int ret;
 
+       rcu_read_lock();
+
        switch (domain) {
        case LTTNG_DOMAIN_KERNEL:
        {
@@ -924,7 +932,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;
                }
@@ -968,6 +976,7 @@ int cmd_disable_event(struct ltt_session *session, int domain,
        ret = LTTNG_OK;
 
 error:
+       rcu_read_unlock();
        return ret;
 }
 
@@ -979,6 +988,8 @@ int cmd_disable_event_all(struct ltt_session *session, int domain,
 {
        int ret;
 
+       rcu_read_lock();
+
        switch (domain) {
        case LTTNG_DOMAIN_KERNEL:
        {
@@ -993,7 +1004,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;
                }
@@ -1037,6 +1048,7 @@ int cmd_disable_event_all(struct ltt_session *session, int domain,
        ret = LTTNG_OK;
 
 error:
+       rcu_read_unlock();
        return ret;
 }
 
@@ -1126,6 +1138,8 @@ int cmd_enable_event(struct ltt_session *session, int domain,
        assert(event);
        assert(channel_name);
 
+       rcu_read_lock();
+
        switch (domain) {
        case LTTNG_DOMAIN_KERNEL:
        {
@@ -1160,8 +1174,7 @@ 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. */
@@ -1225,6 +1238,7 @@ int cmd_enable_event(struct ltt_session *session, int domain,
        ret = LTTNG_OK;
 
 error:
+       rcu_read_unlock();
        return ret;
 }
 
@@ -1241,6 +1255,8 @@ int cmd_enable_event_all(struct ltt_session *session, int domain,
        assert(session);
        assert(channel_name);
 
+       rcu_read_lock();
+
        switch (domain) {
        case LTTNG_DOMAIN_KERNEL:
        {
@@ -1274,21 +1290,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;
@@ -1375,6 +1388,7 @@ int cmd_enable_event_all(struct ltt_session *session, int domain,
        ret = LTTNG_OK;
 
 error:
+       rcu_read_unlock();
        return ret;
 }
 
This page took 0.025195 seconds and 4 git commands to generate.