Fix: RCU unlock out of error path
[lttng-tools.git] / src / bin / lttng-sessiond / ust-app.c
index 3accde269509e0e8b66c3b25c35b86a90289fb5b..6076830099847be986b91be5378d9846c63d63b2 100644 (file)
@@ -2050,7 +2050,7 @@ int ust_app_create_channel_glb(struct ltt_ust_session *usess,
                if (ua_sess == NULL) {
                        /* The malloc() failed. */
                        ret = -1;
-                       goto error;
+                       goto error_rcu_unlock;
                } else if (ua_sess == (void *) -1UL) {
                        /* The application's socket is not valid. Contiuing */
                        ret = -1;
@@ -2062,13 +2062,12 @@ int ust_app_create_channel_glb(struct ltt_ust_session *usess,
                if (ua_chan == NULL) {
                        /* Major problem here and it's maybe the tracer or malloc() */
                        ret = -1;
-                       goto error;
+                       goto error_rcu_unlock;
                }
        }
 
+error_rcu_unlock:
        rcu_read_unlock();
-
-error:
        return ret;
 }
 
@@ -2442,7 +2441,7 @@ error_rcu_unlock:
 /*
  * Destroy a specific UST session in apps.
  */
-int ust_app_destroy_trace(struct ltt_ust_session *usess, struct ust_app *app)
+static int destroy_trace(struct ltt_ust_session *usess, struct ust_app *app)
 {
        struct ust_app_session *ua_sess;
        struct lttng_ust_object_data obj;
@@ -2556,7 +2555,7 @@ int ust_app_destroy_trace_all(struct ltt_ust_session *usess)
        rcu_read_lock();
 
        cds_lfht_for_each_entry(ust_app_ht->ht, &iter.iter, app, pid_n.node) {
-               ret = ust_app_destroy_trace(usess, app);
+               ret = destroy_trace(usess, app);
                if (ret < 0) {
                        /* Continue to next apps even on error */
                        continue;
@@ -2581,10 +2580,7 @@ void ust_app_global_update(struct ltt_ust_session *usess, int sock)
        struct ust_app_event *ua_event;
        struct ust_app_ctx *ua_ctx;
 
-       if (usess == NULL) {
-               ERR("No UST session on global update. Returning");
-               goto error;
-       }
+       assert(usess);
 
        DBG2("UST app global update for app sock %d for session id %d", sock,
                        usess->id);
This page took 0.023688 seconds and 4 git commands to generate.