Fix: missing rcu_read_lock in trace_ust_destroy_session()
[lttng-tools.git] / src / bin / lttng-sessiond / trace-ust.c
index ac980fd45fc6673b1008b4887255e3c9a14e339e..19a1c95d3e803fa9bf95683a0b82a4a953bf9d87 100644 (file)
@@ -202,6 +202,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 +422,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 +752,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,
This page took 0.023252 seconds and 4 git commands to generate.