Fix: agents ht leaks on destroy session
[lttng-tools.git] / src / bin / lttng-sessiond / ust-app.c
index 7e4bf94051028f7c361749f0a162a4baee8e53b4..891d75f7c000b287a5707e702ef04a972f398ac3 100644 (file)
@@ -16,6 +16,7 @@
  */
 
 #define _GNU_SOURCE
+#define _LGPL_SOURCE
 #include <errno.h>
 #include <inttypes.h>
 #include <pthread.h>
@@ -1471,27 +1472,6 @@ int create_ust_event(struct ust_app *app, struct ust_app_session *ua_sess,
                        }
                        goto error;
                }
-       } else {
-               ret = disable_ust_event(app, ua_sess, ua_event);
-               if (ret < 0) {
-                       /*
-                        * If we hit an EPERM, something is wrong with our disable call. If
-                        * we get an EEXIST, there is a problem on the tracer side since we
-                        * just created it.
-                        */
-                       switch (ret) {
-                       case -LTTNG_UST_ERR_PERM:
-                               /* Code flow problem */
-                               assert(0);
-                       case -LTTNG_UST_ERR_EXIST:
-                               /* It's OK for our use case. */
-                               ret = 0;
-                               break;
-                       default:
-                               break;
-                       }
-                       goto error;
-               }
        }
 
 error:
@@ -1989,6 +1969,7 @@ no_match:
 /*
  * Lookup for an ust app context from an lttng_ust_context.
  *
+ * Must be called while holding RCU read side lock.
  * Return an ust_app_ctx object or NULL on error.
  */
 static
@@ -5171,10 +5152,12 @@ unsigned int ust_app_get_nb_stream(struct ltt_ust_session *usess)
                cds_list_for_each_entry(reg, &usess->buffer_reg_uid_list, lnode) {
                        struct buffer_reg_channel *reg_chan;
 
+                       rcu_read_lock();
                        cds_lfht_for_each_entry(reg->registry->channels->ht, &iter.iter,
                                        reg_chan, node.node) {
                                ret += reg_chan->stream_count;
                        }
+                       rcu_read_unlock();
                }
                break;
        }
This page took 0.024598 seconds and 4 git commands to generate.