Fix: agents ht leaks on destroy session
[lttng-tools.git] / src / bin / lttng-sessiond / trace-ust.c
index 339148ae9cdb8fa8da1121bd39d335b5f2b89141..a3e25aa8adfed1532b95ffb22b67849f21e282fb 100644 (file)
@@ -16,6 +16,7 @@
  */
 
 #define _GNU_SOURCE
+#define _LGPL_SOURCE
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -365,6 +366,7 @@ error:
 
 /*
  * Allocate and initialize a ust event. Set name and event type.
+ * We own filter_expression, filter, and exclusion.
  *
  * Return pointer to structure or NULL.
  */
@@ -440,6 +442,9 @@ struct ltt_ust_event *trace_ust_create_event(struct lttng_event *ev,
 error_free_event:
        free(lue);
 error:
+       free(filter_expression);
+       free(filter);
+       free(exclusion);
        return NULL;
 }
 
@@ -752,10 +757,16 @@ void trace_ust_destroy_session(struct ltt_ust_session *session)
        /* Cleaning up UST domain */
        destroy_domain_global(&session->domain_global);
 
+       rcu_read_lock();
        cds_lfht_for_each_entry(session->agents->ht, &iter.iter, agt, node.node) {
-               lttng_ht_del(session->agents, &iter);
+               int ret = lttng_ht_del(session->agents, &iter);
+
+               assert(!ret);
                agent_destroy(agt);
        }
+       rcu_read_unlock();
+
+       ht_cleanup_push(session->agents);
 
        /* Cleanup UID buffer registry object(s). */
        cds_list_for_each_entry_safe(reg, sreg, &session->buffer_reg_uid_list,
This page took 0.024387 seconds and 4 git commands to generate.