X-Git-Url: http://git.efficios.com/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Ftrace-ust.c;h=0e386aa0327f2f430806321766e2a4e2516b64dc;hp=ac980fd45fc6673b1008b4887255e3c9a14e339e;hb=6c1c0768320135c6936c371b09731851b508c023;hpb=401137874924a040b3266954aa2067c8d6aedf26 diff --git a/src/bin/lttng-sessiond/trace-ust.c b/src/bin/lttng-sessiond/trace-ust.c index ac980fd45..0e386aa03 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) @@ -419,11 +423,6 @@ struct ltt_ust_event *trace_ust_create_event(struct lttng_event *ev, ERR("Unknown ust loglevel type (%d)", ev->loglevel_type); goto error_free_event; } - /* - * Fix for enabler race. Enable is now done explicitly by - * sessiond after setting filter. - */ - lue->attr.disabled = 1; /* Same layout. */ lue->filter_expression = filter_expression; @@ -754,10 +753,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,