consumer_add_channel can return an error, it needs to be handled. Also,
init_kernel_tracing returns a positive lttng_error_code on error, so the
check in start_kernel_session needs to be for ret != 0.
Signed-off-by: Julien Desfossez <jdesfossez@efficios.com>
Signed-off-by: David Goulet <dgoulet@efficios.com>
/* Setup kernel consumer socket and send fds to it */
ret = init_kernel_tracing(ksess);
/* Setup kernel consumer socket and send fds to it */
ret = init_kernel_tracing(ksess);
ret = LTTNG_ERR_KERN_START_FAIL;
goto error;
}
ret = LTTNG_ERR_KERN_START_FAIL;
goto error;
}
/* Channel already exist. Ignore the insertion */
ERR("Consumer add channel key %" PRIu64 " already exists!",
channel->key);
/* Channel already exist. Ignore the insertion */
ERR("Consumer add channel key %" PRIu64 " already exists!",
channel->key);
+ ret = LTTNG_ERR_KERN_CHAN_EXIST;
case LTTNG_CONSUMER_ADD_CHANNEL:
{
struct lttng_consumer_channel *new_channel;
case LTTNG_CONSUMER_ADD_CHANNEL:
{
struct lttng_consumer_channel *new_channel;
/* First send a status message before receiving the fds. */
ret = consumer_send_status_msg(sock, ret_code);
/* First send a status message before receiving the fds. */
ret = consumer_send_status_msg(sock, ret_code);
/* Somehow, the session daemon is not responding anymore. */
goto end_nosignal;
}
/* Somehow, the session daemon is not responding anymore. */
goto end_nosignal;
}
DBG("consumer_add_channel %" PRIu64, msg.u.channel.channel_key);
new_channel = consumer_allocate_channel(msg.u.channel.channel_key,
msg.u.channel.session_id, msg.u.channel.pathname,
DBG("consumer_add_channel %" PRIu64, msg.u.channel.channel_key);
new_channel = consumer_allocate_channel(msg.u.channel.channel_key,
msg.u.channel.session_id, msg.u.channel.pathname,
};
if (ctx->on_recv_channel != NULL) {
};
if (ctx->on_recv_channel != NULL) {
- ret = ctx->on_recv_channel(new_channel);
- if (ret == 0) {
- consumer_add_channel(new_channel, ctx);
- } else if (ret < 0) {
+ ret_recv = ctx->on_recv_channel(new_channel);
+ if (ret_recv == 0) {
+ ret = consumer_add_channel(new_channel, ctx);
+ } else if (ret_recv < 0) {
goto end_nosignal;
}
} else {
goto end_nosignal;
}
} else {
- consumer_add_channel(new_channel, ctx);
+ ret = consumer_add_channel(new_channel, ctx);
+ }
+
+ /* If we received an error in add_channel, we need to report it. */
+ if (ret != 0) {
+ consumer_send_status_msg(sock, ret);
+ goto end_nosignal;
goto end_nosignal;
}
case LTTNG_CONSUMER_ADD_STREAM:
goto end_nosignal;
}
case LTTNG_CONSUMER_ADD_STREAM: