X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fkernel.c;h=381b83e6366c120128d9e6a639a081a24c54b684;hb=f5436bfcf6797b979b308a9af782750f9d079686;hp=45d958546f2cae75d938a8960af3c3fd5690be64;hpb=00a620843422e5c972aee0ada2181b811fc81b92;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/kernel.c b/src/bin/lttng-sessiond/kernel.c index 45d958546..381b83e63 100644 --- a/src/bin/lttng-sessiond/kernel.c +++ b/src/bin/lttng-sessiond/kernel.c @@ -187,6 +187,7 @@ int kernel_create_event(struct lttng_event *ev, assert(ev); assert(channel); + /* We pass ownership of filter_expression and filter */ event = trace_kernel_create_event(ev, filter_expression, filter); if (event == NULL) { @@ -378,16 +379,46 @@ error: int kernel_track_pid(struct ltt_kernel_session *session, int pid) { + int ret; + DBG("Kernel track PID %d for session id %" PRIu64 ".", pid, session->id); - return kernctl_track_pid(session->fd, pid); + ret = kernctl_track_pid(session->fd, pid); + if (!ret) { + return LTTNG_OK; + } + switch (errno) { + case EINVAL: + return LTTNG_ERR_INVALID; + case ENOMEM: + return LTTNG_ERR_NOMEM; + case EEXIST: + return LTTNG_ERR_PID_TRACKED; + default: + return LTTNG_ERR_UNK; + } } int kernel_untrack_pid(struct ltt_kernel_session *session, int pid) { + int ret; + DBG("Kernel untrack PID %d for session id %" PRIu64 ".", pid, session->id); - return kernctl_untrack_pid(session->fd, pid); + ret = kernctl_untrack_pid(session->fd, pid); + if (!ret) { + return LTTNG_OK; + } + switch (errno) { + case EINVAL: + return LTTNG_ERR_INVALID; + case ENOMEM: + return LTTNG_ERR_NOMEM; + case ENOENT: + return LTTNG_ERR_PID_NOT_TRACKED; + default: + return LTTNG_ERR_UNK; + } } ssize_t kernel_list_tracker_pids(struct ltt_kernel_session *session,