goto error_consumer;
}
- /*
- * The tmp_consumer stays NULL until a set_consumer_uri command is
- * executed. At this point, the consumer should be nullify until an
- * enable_consumer command. This assignment is symbolic since we've zmalloc
- * the struct.
- */
- lus->tmp_consumer = NULL;
-
DBG2("UST trace session create successful");
return lus;
*
* Return pointer to structure or NULL.
*/
-struct ltt_ust_channel *trace_ust_create_channel(struct lttng_channel *chan)
+struct ltt_ust_channel *trace_ust_create_channel(struct lttng_channel *chan,
+ enum lttng_domain_type domain)
{
struct ltt_ust_channel *luc;
goto error;
}
+ luc->domain = domain;
+
/* Copy UST channel attributes */
luc->attr.overwrite = chan->attr.overwrite;
luc->attr.subbuf_size = chan->attr.subbuf_size;
struct ltt_ust_event *trace_ust_create_event(struct lttng_event *ev,
char *filter_expression,
struct lttng_filter_bytecode *filter,
- struct lttng_event_exclusion *exclusion)
+ struct lttng_event_exclusion *exclusion,
+ bool internal_event)
{
struct ltt_ust_event *lue;
goto error;
}
+ lue->internal = internal_event;
+
switch (ev->type) {
case LTTNG_EVENT_PROBE:
lue->attr.instrumentation = LTTNG_UST_PROBE;
/* Same layout. */
lue->filter_expression = filter_expression;
- lue->filter = (struct lttng_ust_filter_bytecode *) filter;
- lue->exclusion = (struct lttng_event_exclusion *) exclusion;
+ lue->filter = filter;
+ lue->exclusion = exclusion;
/* Init node */
lttng_ht_node_init_str(&lue->node, lue->attr.name);
DBG2("Trace destroy UST channel %s", channel->name);
- /* Destroying all events of the channel */
- destroy_events(channel->events);
- /* Destroying all context of the channel */
- destroy_contexts(channel->ctx);
-
free(channel);
}
void trace_ust_destroy_channel(struct ltt_ust_channel *channel)
{
+ /* Destroying all events of the channel */
+ destroy_events(channel->events);
+ /* Destroying all context of the channel */
+ destroy_contexts(channel->ctx);
+
call_rcu(&channel->node.head, destroy_channel_rcu);
}
*/
static void destroy_channels(struct lttng_ht *channels)
{
- int ret;
struct lttng_ht_node_str *node;
struct lttng_ht_iter iter;
assert(channels);
rcu_read_lock();
-
cds_lfht_for_each_entry(channels->ht, &iter.iter, node, node) {
- ret = lttng_ht_del(channels, &iter);
- assert(!ret);
- call_rcu(&node->head, destroy_channel_rcu);
+ struct ltt_ust_channel *chan =
+ caa_container_of(node, struct ltt_ust_channel, node);
+
+ trace_ust_delete_channel(channels, chan);
+ trace_ust_destroy_channel(chan);
}
rcu_read_unlock();
buffer_reg_uid_destroy(reg, session->consumer);
}
- consumer_destroy_output(session->consumer);
- consumer_destroy_output(session->tmp_consumer);
+ consumer_output_put(session->consumer);
fini_pid_tracker(&session->pid_tracker);