* URI was the same in the consumer so we do not append the subdir
* again so to not duplicate output dir.
*/
+ ret = LTTNG_OK;
goto error;
}
attr->attr.switch_timer_interval = 0;
}
+ /*
+ * The ringbuffer (both in user space and kernel) behave badly in overwrite
+ * mode and with less than 2 subbuf so block it right away and send back an
+ * invalid attribute error.
+ */
+ if (attr->attr.overwrite && attr->attr.num_subbuf < 2) {
+ ret = LTTNG_ERR_INVALID;
+ goto error;
+ }
+
switch (domain->type) {
case LTTNG_DOMAIN_KERNEL:
{
memset(&uevent, 0, sizeof(uevent));
uevent.type = LTTNG_EVENT_TRACEPOINT;
uevent.loglevel_type = LTTNG_EVENT_LOGLEVEL_ALL;
- strncpy(uevent.name, DEFAULT_JUL_EVENT_NAME, sizeof(uevent.name));
+ if (is_root) {
+ strncpy(uevent.name, DEFAULT_SYS_JUL_EVENT_NAME,
+ sizeof(uevent.name));
+ } else {
+ strncpy(uevent.name, DEFAULT_USER_JUL_EVENT_NAME,
+ sizeof(uevent.name));
+ }
uevent.name[sizeof(uevent.name) - 1] = '\0';
/*
tmp_dom.type = LTTNG_DOMAIN_UST;
ret = cmd_enable_event(session, &tmp_dom, DEFAULT_JUL_CHANNEL_NAME,
- &uevent, NULL, NULL, wpipe);
+ &uevent, filter, NULL, wpipe);
if (ret != LTTNG_OK && ret != LTTNG_ERR_UST_EVENT_ENABLED) {
goto error;
}
/* Create the default JUL tracepoint. */
uevent.type = LTTNG_EVENT_TRACEPOINT;
uevent.loglevel_type = LTTNG_EVENT_LOGLEVEL_ALL;
- strncpy(uevent.name, DEFAULT_JUL_EVENT_NAME, sizeof(uevent.name));
+ if (is_root) {
+ strncpy(uevent.name, DEFAULT_SYS_JUL_EVENT_NAME,
+ sizeof(uevent.name));
+ } else {
+ strncpy(uevent.name, DEFAULT_USER_JUL_EVENT_NAME,
+ sizeof(uevent.name));
+ }
uevent.name[sizeof(uevent.name) - 1] = '\0';
/*
sessions[i].name[NAME_MAX - 1] = '\0';
sessions[i].enabled = session->enabled;
sessions[i].snapshot_mode = session->snapshot_mode;
+ sessions[i].live_timer_interval = session->live_timer;
i++;
}
}
if (session->enabled) {
ret = LTTNG_ERR_SESSION_STARTED;
goto error;
+ } else {
+ /*
+ * If stopped, just make sure we've started before else the above call
+ * will always send that there is data pending.
+ *
+ * The consumer assumes that when the data pending command is received,
+ * the trace has been started before or else no output data is written
+ * by the streams which is a condition for data pending. So, this is
+ * *VERY* important that we don't ask the consumer before a start
+ * trace.
+ */
+ if (!session->started) {
+ ret = 0;
+ goto error;
+ }
}
if (ksess && ksess->consumer) {