goto end;
}
- strncpy(xsd_path, base_path, max_path_len);
+ strcpy(xsd_path, base_path);
if (xsd_path[base_path_len - 1] != '/') {
xsd_path[base_path_len++] = '/';
}
- strncpy(xsd_path + base_path_len, DEFAULT_SESSION_CONFIG_XSD_FILENAME,
- max_path_len - base_path_len);
+ strcpy(xsd_path + base_path_len, DEFAULT_SESSION_CONFIG_XSD_FILENAME);
end:
return xsd_path;
}
static
int create_session(const char *name,
- struct lttng_domain *kernel_domain,
- struct lttng_domain *ust_domain,
- struct lttng_domain *jul_domain,
- struct lttng_domain *log4j_domain,
xmlNodePtr output_node,
uint64_t live_timer_interval,
const struct config_load_session_override_attr *overrides)
/* create all channels */
for (node = xmlFirstElementChild(channels_node); node;
node = xmlNextElementSibling(node)) {
+ const enum lttng_domain_type original_domain = domain.type;
xmlNodePtr contexts_node = NULL;
xmlNodePtr events_node = NULL;
xmlNodePtr channel_attr_node;
+ /*
+ * Channels of the "agent" types cannot be created directly.
+ * They are meant to be created implicitly through the
+ * activation of events in their domain. However, a user
+ * can override the default channel configuration attributes
+ * by creating the underlying UST channel _before_ enabling
+ * an agent domain event.
+ *
+ * Hence, the channel's type is substituted before the creation
+ * and restored by the time the events are created.
+ */
+ switch (domain.type) {
+ case LTTNG_DOMAIN_JUL:
+ case LTTNG_DOMAIN_LOG4J:
+ case LTTNG_DOMAIN_PYTHON:
+ domain.type = LTTNG_DOMAIN_UST;
+ default:
+ break;
+ }
+
channel = lttng_channel_create(&domain);
if (!channel) {
ret = -1;
goto end;
}
+ /* Restore the original channel domain. */
+ domain.type = original_domain;
+
ret = process_events_node(events_node, handle, channel->name);
if (ret) {
goto end;
overrides);
} else if (live_timer_interval &&
live_timer_interval != UINT64_MAX) {
- ret = create_session((const char *) name, kernel_domain,
- ust_domain, jul_domain, log4j_domain,
+ ret = create_session((const char *) name,
output_node, live_timer_interval, overrides);
} else {
/* regular session */
- ret = create_session((const char *) name, kernel_domain,
- ust_domain, jul_domain, log4j_domain,
+ ret = create_session((const char *) name,
output_node, UINT64_MAX, overrides);
}
if (ret) {