Fix: define _LGPL_SOURCE in C files
[lttng-tools.git] / src / common / kernel-consumer / kernel-consumer.c
index 57dc2ba6a76767d623c62fc552cb413fd0a0e71f..f2023a6961e3f13b619fbeb92a761c8e1fd7998c 100644 (file)
@@ -17,6 +17,7 @@
  */
 
 #define _GNU_SOURCE
+#define _LGPL_SOURCE
 #include <assert.h>
 #include <poll.h>
 #include <pthread.h>
@@ -61,7 +62,7 @@ int lttng_kconsumer_take_snapshot(struct lttng_consumer_stream *stream)
 
        ret = kernctl_snapshot(infd);
        if (ret != 0) {
-               perror("Getting sub-buffer snapshot.");
+               PERROR("Getting sub-buffer snapshot.");
                ret = -errno;
        }
 
@@ -81,7 +82,7 @@ int lttng_kconsumer_get_produced_snapshot(struct lttng_consumer_stream *stream,
 
        ret = kernctl_snapshot_get_produced(infd, pos);
        if (ret != 0) {
-               perror("kernctl_snapshot_get_produced");
+               PERROR("kernctl_snapshot_get_produced");
                ret = -errno;
        }
 
@@ -101,7 +102,7 @@ int lttng_kconsumer_get_consumed_snapshot(struct lttng_consumer_stream *stream,
 
        ret = kernctl_snapshot_get_consumed(infd, pos);
        if (ret != 0) {
-               perror("kernctl_snapshot_get_consumed");
+               PERROR("kernctl_snapshot_get_consumed");
                ret = -errno;
        }
 
@@ -562,7 +563,7 @@ int lttng_kconsumer_recv_cmd(struct lttng_consumer_local_data *ctx,
                         * happens while tearing down.
                         */
                        ERR("Unable to find channel key %" PRIu64, msg.u.stream.channel_key);
-                       ret_code = LTTNG_ERR_KERN_CHAN_NOT_FOUND;
+                       ret_code = LTTCOMM_CONSUMERD_CHAN_NOT_FOUND;
                }
 
                health_code_update();
@@ -765,7 +766,7 @@ int lttng_kconsumer_recv_cmd(struct lttng_consumer_local_data *ctx,
                         */
                        ERR("Unable to find channel key %" PRIu64,
                                        msg.u.sent_streams.channel_key);
-                       ret_code = LTTNG_ERR_KERN_CHAN_NOT_FOUND;
+                       ret_code = LTTCOMM_CONSUMERD_CHAN_NOT_FOUND;
                }
 
                health_code_update();
@@ -774,7 +775,7 @@ int lttng_kconsumer_recv_cmd(struct lttng_consumer_local_data *ctx,
                 * Send status code to session daemon.
                 */
                ret = consumer_send_status_msg(sock, ret_code);
-               if (ret < 0) {
+               if (ret < 0 || ret_code != LTTCOMM_CONSUMERD_SUCCESS) {
                        /* Somehow, the session daemon is not responding anymore. */
                        goto end_nosignal;
                }
@@ -816,7 +817,7 @@ int lttng_kconsumer_recv_cmd(struct lttng_consumer_local_data *ctx,
                relayd = consumer_find_relayd(index);
                if (relayd == NULL) {
                        DBG("Unable to find relayd %" PRIu64, index);
-                       ret_code = LTTNG_ERR_NO_CONSUMER;
+                       ret_code = LTTCOMM_CONSUMERD_RELAYD_FAIL;
                }
 
                /*
@@ -875,7 +876,7 @@ int lttng_kconsumer_recv_cmd(struct lttng_consumer_local_data *ctx,
                                        msg.u.snapshot_channel.relayd_id, ctx);
                        if (ret < 0) {
                                ERR("Snapshot metadata failed");
-                               ret_code = LTTNG_ERR_KERN_META_FAIL;
+                               ret_code = LTTCOMM_CONSUMERD_ERROR_METADATA;
                        }
                } else {
                        ret = lttng_kconsumer_snapshot_channel(msg.u.snapshot_channel.key,
@@ -885,7 +886,7 @@ int lttng_kconsumer_recv_cmd(struct lttng_consumer_local_data *ctx,
                                        ctx);
                        if (ret < 0) {
                                ERR("Snapshot channel failed");
-                               ret_code = LTTNG_ERR_KERN_CHAN_FAIL;
+                               ret_code = LTTCOMM_CONSUMERD_CHAN_NOT_FOUND;
                        }
                }
 
@@ -906,7 +907,7 @@ int lttng_kconsumer_recv_cmd(struct lttng_consumer_local_data *ctx,
                channel = consumer_find_channel(key);
                if (!channel) {
                        ERR("Kernel consumer destroy channel %" PRIu64 " not found", key);
-                       ret_code = LTTNG_ERR_KERN_CHAN_NOT_FOUND;
+                       ret_code = LTTCOMM_CONSUMERD_CHAN_NOT_FOUND;
                }
 
                health_code_update();
@@ -1083,7 +1084,18 @@ ssize_t lttng_kconsumer_read_subbuffer(struct lttng_consumer_stream *stream,
        /* Get the full subbuffer size including padding */
        err = kernctl_get_padded_subbuf_size(infd, &len);
        if (err != 0) {
-               perror("Getting sub-buffer len failed.");
+               PERROR("Getting sub-buffer len failed.");
+               err = kernctl_put_subbuf(infd);
+               if (err != 0) {
+                       if (errno == EFAULT) {
+                               PERROR("Error in unreserving sub buffer\n");
+                       } else if (errno == EIO) {
+                               /* Should never happen with newer LTTng versions */
+                               PERROR("Reader has been pushed by the writer, last sub-buffer corrupted.");
+                       }
+                       ret = -errno;
+                       goto end;
+               }
                ret = -errno;
                goto end;
        }
@@ -1091,6 +1103,17 @@ ssize_t lttng_kconsumer_read_subbuffer(struct lttng_consumer_stream *stream,
        if (!stream->metadata_flag) {
                ret = get_index_values(&index, infd);
                if (ret < 0) {
+                       err = kernctl_put_subbuf(infd);
+                       if (err != 0) {
+                               if (errno == EFAULT) {
+                                       PERROR("Error in unreserving sub buffer\n");
+                               } else if (errno == EIO) {
+                                       /* Should never happen with newer LTTng versions */
+                                       PERROR("Reader has been pushed by the writer, last sub-buffer corrupted.");
+                               }
+                               ret = -errno;
+                               goto end;
+                       }
                        goto end;
                }
        } else {
@@ -1128,7 +1151,18 @@ ssize_t lttng_kconsumer_read_subbuffer(struct lttng_consumer_stream *stream,
                /* Get subbuffer size without padding */
                err = kernctl_get_subbuf_size(infd, &subbuf_size);
                if (err != 0) {
-                       perror("Getting sub-buffer len failed.");
+                       PERROR("Getting sub-buffer len failed.");
+                       err = kernctl_put_subbuf(infd);
+                       if (err != 0) {
+                               if (errno == EFAULT) {
+                                       PERROR("Error in unreserving sub buffer\n");
+                               } else if (errno == EIO) {
+                                       /* Should never happen with newer LTTng versions */
+                                       PERROR("Reader has been pushed by the writer, last sub-buffer corrupted.");
+                               }
+                               ret = -errno;
+                               goto end;
+                       }
                        ret = -errno;
                        goto end;
                }
@@ -1167,10 +1201,10 @@ ssize_t lttng_kconsumer_read_subbuffer(struct lttng_consumer_stream *stream,
        err = kernctl_put_next_subbuf(infd);
        if (err != 0) {
                if (errno == EFAULT) {
-                       perror("Error in unreserving sub buffer\n");
+                       PERROR("Error in unreserving sub buffer\n");
                } else if (errno == EIO) {
                        /* Should never happen with newer LTTng versions */
-                       perror("Reader has been pushed by the writer, last sub-buffer corrupted.");
+                       PERROR("Reader has been pushed by the writer, last sub-buffer corrupted.");
                }
                ret = -errno;
                goto end;
This page took 0.026468 seconds and 5 git commands to generate.