X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=ltt-sessiond%2Fkernel-ctl.c;h=9c270edb3325674be28ed3886c646b8267ba0022;hb=d87bfb32097dd9dddb5de2b05dd87b53e3d3ad73;hp=b66f08cb3fd354d00f15a3abd85d8dfa21462371;hpb=54d01ffb43587b221dc50ec42b6070fad89bd255;p=lttng-tools.git diff --git a/ltt-sessiond/kernel-ctl.c b/ltt-sessiond/kernel-ctl.c index b66f08cb3..9c270edb3 100644 --- a/ltt-sessiond/kernel-ctl.c +++ b/ltt-sessiond/kernel-ctl.c @@ -189,15 +189,28 @@ int kernel_create_event(struct lttng_event *ev, event = trace_kernel_create_event(ev); if (event == NULL) { + ret = -1; goto error; } ret = kernctl_create_event(channel->fd, event->event); if (ret < 0) { - perror("create event ioctl"); + if (errno != EEXIST) { + PERROR("create event ioctl"); + } + ret = -errno; goto free_event; } + /* + * LTTNG_KERNEL_SYSCALL event creation will return 0 on success. However + * this FD must not be added to the event list. + */ + if (ret == 0 && event->event->instrumentation == LTTNG_KERNEL_SYSCALL) { + DBG2("Kernel event syscall creation success"); + goto end; + } + event->fd = ret; /* Prevent fd duplication after execlp() */ ret = fcntl(event->fd, F_SETFD, FD_CLOEXEC); @@ -211,12 +224,13 @@ int kernel_create_event(struct lttng_event *ev, DBG("Event %s created (fd: %d)", ev->name, event->fd); +end: return 0; free_event: free(event); error: - return -1; + return ret; } /*