Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
struct ltt_ust_channel *uchan = NULL;
struct lttng_channel *defattr = NULL;
enum lttng_domain_type domain = LTTNG_DOMAIN_UST;
struct ltt_ust_channel *uchan = NULL;
struct lttng_channel *defattr = NULL;
enum lttng_domain_type domain = LTTNG_DOMAIN_UST;
+ bool chan_published = false;
if (strncmp(uchan->name, DEFAULT_METADATA_NAME,
sizeof(uchan->name))) {
lttng_ht_add_unique_str(usess->domain_global.channels, &uchan->node);
if (strncmp(uchan->name, DEFAULT_METADATA_NAME,
sizeof(uchan->name))) {
lttng_ht_add_unique_str(usess->domain_global.channels, &uchan->node);
} else {
/*
* Copy channel attribute to session if this is metadata so if NO
} else {
/*
* Copy channel attribute to session if this is metadata so if NO
agt = agent_create(domain);
if (!agt) {
ret = LTTNG_ERR_NOMEM;
agt = agent_create(domain);
if (!agt) {
ret = LTTNG_ERR_NOMEM;
+ goto error_remove_chan;
}
agent_add(agt, usess->agents);
}
}
agent_add(agt, usess->agents);
}
free(defattr);
return LTTNG_OK;
free(defattr);
return LTTNG_OK;
+error_remove_chan:
+ if (chan_published) {
+ trace_ust_delete_channel(usess->domain_global.channels, uchan);
+ }
- /*
- * No need to remove the channel from the hash table because at this point
- * it was not added hence the direct call and no call_rcu().
- */
trace_ust_destroy_channel(uchan);
error:
free(defattr);
trace_ust_destroy_channel(uchan);
error:
free(defattr);