}
/*
- * LTTNG_KERNEL_SYSCALL event creation will return 0 on success. However
- * this FD must not be added to the event list.
+ * LTTNG_KERNEL_SYSCALL event creation will return 0 on success.
*/
if (ret == 0 && event->event->instrumentation == LTTNG_KERNEL_SYSCALL) {
DBG2("Kernel event syscall creation success");
- goto end;
+ /*
+ * We use fd == -1 to ensure that we never trigger a close of fd
+ * 0.
+ */
+ event->fd = -1;
+ goto add_list;
}
event->fd = ret;
perror("fcntl session fd");
}
+add_list:
/* Add event to event list */
cds_list_add(&event->list, &channel->events_list.head);
channel->event_count++;
DBG("Event %s created (fd: %d)", ev->name, event->fd);
-end:
return 0;
free_event:
int ret;
struct ltt_kernel_stream *lks;
- while ((ret = kernctl_create_stream(channel->fd)) > 0) {
+ while ((ret = kernctl_create_stream(channel->fd)) >= 0) {
lks = trace_kernel_create_stream();
if (lks == NULL) {
close(ret);
}
/* Validate version */
- if (version.version > KERN_MODULES_VERSION) {
+ if (version.major != KERN_MODULES_PRE_MAJOR
+ && version.major != KERN_MODULES_MAJOR) {
goto error_version;
}
- DBG2("Kernel tracer version validated (major version %d)", version.version);
+ DBG2("Kernel tracer version validated (major version %d)", version.major);
return 0;
error_version:
ERR("Kernel major version %d is not compatible (supporting <= %d)",
- version.version, KERN_MODULES_VERSION)
+ version.major, KERN_MODULES_MAJOR)
ret = -1;
error: