assert(event);
assert(channel_name);
+ /* If we have a filter, we must have its filter expression */
+ assert(!(!!filter_expression ^ !!filter));
+
DBG("Enable event command for event \'%s\'", event->name);
ret = validate_event_name(event->name);
if (!agt) {
agt = agent_create(domain->type);
if (!agt) {
- ret = -LTTNG_ERR_NOMEM;
+ ret = LTTNG_ERR_NOMEM;
goto error;
}
agent_add(agt, usess->agents);
uevent.loglevel_type = LTTNG_EVENT_LOGLEVEL_ALL;
default_event_name = event_get_default_agent_ust_name(domain->type);
if (!default_event_name) {
- ret = -LTTNG_ERR_FATAL;
+ ret = LTTNG_ERR_FATAL;
goto error;
}
strncpy(uevent.name, default_event_name, sizeof(uevent.name));
{
struct lttng_filter_bytecode *filter_copy = NULL;
+ char *filter_expression_copy = NULL;
if (filter) {
filter_copy = zmalloc(
}
memcpy(filter_copy, filter,
- sizeof(struct lttng_filter_bytecode)
- + filter->len);
+ sizeof(struct lttng_filter_bytecode)
+ + filter->len);
+ }
+
+ if (filter_expression) {
+ filter_expression_copy =
+ strdup(filter_expression);
+ if (!filter_expression) {
+ ret = LTTNG_ERR_NOMEM;
+ goto error_free_copy;
+ }
}
ret = cmd_enable_event_internal(session, &tmp_dom,
(char *) default_chan_name,
- &uevent, filter_expression, filter_copy,
- NULL, wpipe);
- /* We have passed ownership */
- filter_expression = NULL;
+ &uevent, filter_expression_copy,
+ filter_copy, NULL, wpipe);
+ filter_copy = NULL;
+ filter_expression_copy = NULL;
+error_free_copy:
+ free(filter_copy);
+ free(filter_expression_copy);
}
if (ret != LTTNG_OK && ret != LTTNG_ERR_UST_EVENT_ENABLED) {
/* The wild card * means that everything should be enabled. */
if (strncmp(event->name, "*", 1) == 0 && strlen(event->name) == 1) {
- ret = event_agent_enable_all(usess, agt, event, filter);
+ ret = event_agent_enable_all(usess, agt, event, filter,
+ filter_expression);
filter = NULL;
} else {
- ret = event_agent_enable(usess, agt, event, filter);
+ ret = event_agent_enable(usess, agt, event, filter,
+ filter_expression);
filter = NULL;
}
if (ret != LTTNG_OK) {