* Add context on a kernel channel.
*/
int kernel_add_channel_context(struct ltt_kernel_channel *chan,
- struct lttng_kernel_context *ctx)
+ struct ltt_kernel_context *ctx)
{
int ret;
assert(ctx);
DBG("Adding context to channel %s", chan->channel->name);
- ret = kernctl_add_context(chan->fd, ctx);
+ ret = kernctl_add_context(chan->fd, &ctx->ctx);
if (ret < 0) {
if (errno != EEXIST) {
PERROR("add context ioctl");
goto error;
}
- chan->ctx = zmalloc(sizeof(struct lttng_kernel_context));
- if (chan->ctx == NULL) {
- PERROR("zmalloc event context");
- goto error;
- }
-
- memcpy(chan->ctx, ctx, sizeof(struct lttng_kernel_context));
+ cds_list_add_tail(&ctx->list, &chan->ctx_list);
return 0;
case ENOSYS:
WARN("Event type not implemented");
break;
+ case ENOENT:
+ WARN("Event %s not found!", ev->name);
+ break;
default:
PERROR("create event ioctl");
}
DBG("Tearing down kernel session");
/*
- * Destroy channels on the consumer if in no output mode because the
- * streams are in *no* monitor mode so we have to send a command to clean
- * them up or else they leaked.
+ * Destroy channels on the consumer if at least one FD has been sent and we
+ * are in no output mode because the streams are in *no* monitor mode so we
+ * have to send a command to clean them up or else they leaked.
*/
- if (!ksess->output_traces) {
+ if (!ksess->output_traces && ksess->consumer_fds_sent) {
int ret;
struct consumer_socket *socket;
struct lttng_ht_iter iter;