X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Ftrace-ust.c;h=b9fdf9f0af213bbf9f402b297df9dbc9308ce9b1;hb=49d21f93659c296425c129bc7722bd8255f5c1b1;hp=1f6fd52736abe4f8abde125fdc092601d491ec46;hpb=1e199c04cd2f0b9c378d89a11e42c516d5f8d90e;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/trace-ust.c b/src/bin/lttng-sessiond/trace-ust.c index 1f6fd5273..b9fdf9f0a 100644 --- a/src/bin/lttng-sessiond/trace-ust.c +++ b/src/bin/lttng-sessiond/trace-ust.c @@ -16,6 +16,7 @@ */ #define _GNU_SOURCE +#define _LGPL_SOURCE #include #include #include @@ -202,6 +203,9 @@ error: /* * Lookup an agent in the session agents hash table by domain type and return * the object if found else NULL. + * + * RCU read side lock must be acquired before calling and only released + * once the agent is no longer in scope or being used. */ struct agent *trace_ust_find_agent(struct ltt_ust_session *session, enum lttng_domain_type domain_type) @@ -362,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. */ @@ -437,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; } @@ -749,10 +757,12 @@ 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); agent_destroy(agt); } + rcu_read_unlock(); /* Cleanup UID buffer registry object(s). */ cds_list_for_each_entry_safe(reg, sreg, &session->buffer_reg_uid_list,