const char * const config_element_num_subbuf = "subbuffer_count";
const char * const config_element_switch_timer_interval = "switch_timer_interval";
const char * const config_element_read_timer_interval = "read_timer_interval";
+LTTNG_HIDDEN const char * const config_element_monitor_timer_interval = "monitor_timer_interval";
+LTTNG_HIDDEN const char * const config_element_blocking_timeout = "blocking_timeout";
const char * const config_element_output = "output";
const char * const config_element_output_type = "output_type";
const char * const config_element_tracefile_size = "tracefile_size";
}
}
+ control_uri = output.control_uri;
+ data_uri = output.data_uri;
+ path = output.path;
+
if (overrides) {
if (overrides->path_url) {
- /* Control/data_uri are null */
path = overrides->path_url;
+ /* Control/data_uri are null */
+ control_uri = NULL;
+ data_uri = NULL;
} else {
if (overrides->ctrl_url) {
- /* path is null */
control_uri = overrides->ctrl_url;
+ /* path is null */
+ path = NULL;
}
if (overrides->data_url) {
- /* path is null */
data_uri = overrides->data_url;
+ /* path is null */
+ path = NULL;
}
}
- } else {
- control_uri = output.control_uri;
- data_uri = output.data_uri;
- path = output.path;
}
snapshot_output = lttng_snapshot_output_create();
}
}
+ control_uri = output.control_uri;
+ data_uri = output.data_uri;
+ path = output.path;
+
/* Check for override and apply them */
if (overrides) {
if (overrides->path_url) {
- /* control/data_uri are null */;
path = overrides->path_url;
+ /* control/data_uri are null */;
+ control_uri = NULL;
+ data_uri = NULL;
} else {
if (overrides->ctrl_url) {
- /* path is null */
control_uri = overrides->ctrl_url;
+ /* path is null */
+ path = NULL;
}
if (overrides->data_url) {
- /* path is null */
data_uri = overrides->data_url;
+ /* path is null */
+ path = NULL;
}
}
- } else {
- control_uri = output.control_uri;
- data_uri = output.data_uri;
- path = output.path;
}
+
if (live_timer_interval != UINT64_MAX && !control_uri && !data_uri) {
ret = -LTTNG_ERR_LOAD_INVALID_CONFIG;
goto end;
channel->attr.live_timer_interval =
live_timer_interval;
+ } else if (!strcmp((const char *) attr_node->name,
+ config_element_monitor_timer_interval)) {
+ xmlChar *content;
+ uint64_t monitor_timer_interval = 0;
+
+ /* monitor_timer_interval */
+ content = xmlNodeGetContent(attr_node);
+ if (!content) {
+ ret = -LTTNG_ERR_NOMEM;
+ goto end;
+ }
+
+ ret = parse_uint(content, &monitor_timer_interval);
+ free(content);
+ if (ret) {
+ ret = -LTTNG_ERR_LOAD_INVALID_CONFIG;
+ goto end;
+ }
+
+ ret = lttng_channel_set_monitor_timer_interval(channel,
+ monitor_timer_interval);
+ if (ret) {
+ ret = -LTTNG_ERR_LOAD_INVALID_CONFIG;
+ goto end;
+ }
+ } else if (!strcmp((const char *) attr_node->name,
+ config_element_blocking_timeout)) {
+ xmlChar *content;
+ int64_t blocking_timeout = 0;
+
+ /* blocking_timeout */
+ content = xmlNodeGetContent(attr_node);
+ if (!content) {
+ ret = -LTTNG_ERR_NOMEM;
+ goto end;
+ }
+
+ ret = parse_int(content, &blocking_timeout);
+ free(content);
+ if (ret) {
+ ret = -LTTNG_ERR_LOAD_INVALID_CONFIG;
+ goto end;
+ }
+
+ ret = lttng_channel_set_blocking_timeout(channel,
+ blocking_timeout);
+ if (ret) {
+ ret = -LTTNG_ERR_LOAD_INVALID_CONFIG;
+ goto end;
+ }
} else if (!strcmp((const char *) attr_node->name,
config_element_events)) {
/* events */
return ret;
}
-
static
int process_domain_node(xmlNodePtr domain_node, const char *session_name)
{
int ret;
struct lttng_domain domain = { 0 };
struct lttng_handle *handle = NULL;
+ struct lttng_channel *channel = NULL;
xmlNodePtr channels_node = NULL;
xmlNodePtr trackers_node = NULL;
xmlNodePtr pid_tracker_node = NULL;
/* create all channels */
for (node = xmlFirstElementChild(channels_node); node;
node = xmlNextElementSibling(node)) {
- struct lttng_channel channel;
xmlNodePtr contexts_node = NULL;
xmlNodePtr events_node = NULL;
xmlNodePtr channel_attr_node;
- memset(&channel, 0, sizeof(channel));
- lttng_channel_set_default_attr(&domain, &channel.attr);
+ channel = lttng_channel_create(&domain);
+ if (!channel) {
+ ret = -1;
+ goto end;
+ }
for (channel_attr_node = xmlFirstElementChild(node);
channel_attr_node; channel_attr_node =
xmlNextElementSibling(channel_attr_node)) {
ret = process_channel_attr_node(channel_attr_node,
- &channel, &contexts_node, &events_node);
+ channel, &contexts_node, &events_node);
if (ret) {
goto end;
}
}
- ret = lttng_enable_channel(handle, &channel);
+ ret = lttng_enable_channel(handle, channel);
if (ret < 0) {
goto end;
}
- ret = process_events_node(events_node, handle, channel.name);
+ ret = process_events_node(events_node, handle, channel->name);
if (ret) {
goto end;
}
ret = process_contexts_node(contexts_node, handle,
- channel.name);
+ channel->name);
if (ret) {
goto end;
}
+
+ lttng_channel_destroy(channel);
}
+ channel = NULL;
/* get the trackers node */
for (node = xmlFirstElementChild(domain_node); node;
}
end:
+ lttng_channel_destroy(channel);
lttng_destroy_handle(handle);
return ret;
}
goto error;
}
+ /* Apply overrides */
+ if (overrides) {
+ if (overrides->session_name) {
+ xmlChar *name_override = xmlStrdup(BAD_CAST(overrides->session_name));
+ if (!name_override) {
+ ret = -LTTNG_ERR_NOMEM;
+ goto error;
+ }
+
+ /* Overrides the session name to the provided name */
+ xmlFree(name);
+ name = name_override;
+ }
+ }
+
if (overwrite) {
/* Destroy session if it exists */
ret = lttng_destroy_session((const char *) name);
if (errno != ENOENT) {
PERROR("stat");
}
- ret = -LTTNG_ERR_INVALID;
goto valid;
}