Backported to glibc 2.8
[lttng-tools.git] / src / common / kernel-consumer / kernel-consumer.c
index 0b793c9032e484cc55ae3c3f4b9372c07ffdc35c..57dc2ba6a76767d623c62fc552cb413fd0a0e71f 100644 (file)
@@ -35,6 +35,7 @@
 #include <common/sessiond-comm/sessiond-comm.h>
 #include <common/sessiond-comm/relayd.h>
 #include <common/compat/fcntl.h>
+#include <common/compat/endian.h>
 #include <common/pipe.h>
 #include <common/relayd/relayd.h>
 #include <common/utils.h>
@@ -441,17 +442,8 @@ int lttng_kconsumer_recv_cmd(struct lttng_consumer_local_data *ctx,
 
        health_code_update();
 
-       if (msg.cmd_type == LTTNG_CONSUMER_STOP) {
-               /*
-                * Notify the session daemon that the command is completed.
-                *
-                * On transport layer error, the function call will print an error
-                * message so handling the returned code is a bit useless since we
-                * return an error code anyway.
-                */
-               (void) consumer_send_status_msg(sock, ret_code);
-               return -ENOENT;
-       }
+       /* Deprecated command */
+       assert(msg.cmd_type != LTTNG_CONSUMER_STOP);
 
        health_code_update();
 
@@ -593,9 +585,8 @@ int lttng_kconsumer_recv_cmd(struct lttng_consumer_local_data *ctx,
                health_poll_entry();
                ret = lttng_consumer_poll_socket(consumer_sockpoll);
                health_poll_exit();
-               if (ret < 0) {
-                       rcu_read_unlock();
-                       return -EINTR;
+               if (ret) {
+                       goto error_fatal;
                }
 
                health_code_update();
@@ -928,6 +919,11 @@ int lttng_kconsumer_recv_cmd(struct lttng_consumer_local_data *ctx,
 
                health_code_update();
 
+               /* Stop right now if no channel was found. */
+               if (!channel) {
+                       goto end_nosignal;
+               }
+
                /*
                 * This command should ONLY be issued for channel with streams set in
                 * no monitor mode.
@@ -1154,9 +1150,10 @@ ssize_t lttng_kconsumer_read_subbuffer(struct lttng_consumer_stream *stream,
                                (ret != len && stream->net_seq_idx == (uint64_t) -1ULL)) {
                        /*
                         * Display the error but continue processing to try to release the
-                        * subbuffer
+                        * subbuffer. This is a DBG statement since this is possible to
+                        * happen without being a critical error.
                         */
-                       ERR("Error writing to tracefile "
+                       DBG("Error writing to tracefile "
                                        "(ret: %zd != len: %lu != subbuf_size: %lu)",
                                        ret, len, subbuf_size);
                        write_index = 0;
This page took 0.024323 seconds and 4 git commands to generate.