strncpy((*events)[i].name, event->event->name, LTTNG_SYMBOL_NAME_LEN);
(*events)[i].name[LTTNG_SYMBOL_NAME_LEN - 1] = '\0';
(*events)[i].enabled = event->enabled;
+ (*events)[i].filter =
+ (unsigned char) !!event->filter_expression;
switch (event->event->instrumentation) {
case LTTNG_KERNEL_TRACEPOINT:
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);
assert(uchan);
}
+ if (uchan->domain != LTTNG_DOMAIN_UST && !internal_event) {
+ /*
+ * Don't allow users to add UST events to channels which
+ * are assigned to a userspace subdomain (JUL, Log4J,
+ * Python, etc.).
+ */
+ ret = LTTNG_ERR_INVALID_CHANNEL_DOMAIN;
+ goto error;
+ }
+
if (!internal_event) {
/*
* Ensure the event name is not reserved for internal
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));
sizeof(struct lttng_filter_bytecode)
+ filter->len);
if (!filter_copy) {
+ ret = LTTNG_ERR_NOMEM;
goto error;
}