From 36d1687c718cc647604741cf21e1ffa0b3459429 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=A9mie=20Galarneau?= Date: Wed, 16 May 2018 18:32:38 -0400 Subject: [PATCH] Fix: sessions with agent channels fail to load MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 events are created. Signed-off-by: Jérémie Galarneau --- src/common/config/session-config.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/common/config/session-config.c b/src/common/config/session-config.c index 8b91f32d5..0d75a088d 100644 --- a/src/common/config/session-config.c +++ b/src/common/config/session-config.c @@ -2437,10 +2437,31 @@ int process_domain_node(xmlNodePtr domain_node, const char *session_name) /* 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; @@ -2462,6 +2483,9 @@ int process_domain_node(xmlNodePtr domain_node, const char *session_name) goto end; } + /* Restore the original channel domain. */ + domain.type = original_domain; + ret = process_events_node(events_node, handle, channel->name); if (ret) { goto end; -- 2.34.1