Add a consumer daemon INIT command
[lttng-tools.git] / src / common / kernel-consumer / kernel-consumer.c
index b890416cac1d96db4fe481c27f9f395e4a14707d..74c6de399af9f260264eac8a01894f4a1487c599 100644 (file)
@@ -129,8 +129,10 @@ int lttng_kconsumer_get_consumed_snapshot(struct lttng_consumer_stream *stream,
  *
  * Returns 0 on success, < 0 on error
  */
-int lttng_kconsumer_snapshot_channel(struct lttng_consumer_channel *channel,
-               uint64_t key, char *path, uint64_t relayd_id, uint64_t nb_packets_per_stream,
+static int lttng_kconsumer_snapshot_channel(
+               struct lttng_consumer_channel *channel,
+               uint64_t key, char *path, uint64_t relayd_id,
+               uint64_t nb_packets_per_stream,
                struct lttng_consumer_local_data *ctx)
 {
        int ret;
@@ -142,7 +144,8 @@ int lttng_kconsumer_snapshot_channel(struct lttng_consumer_channel *channel,
 
        /* Splice is not supported yet for channel snapshot. */
        if (channel->output != CONSUMER_CHANNEL_MMAP) {
-               ERR("Unsupported output %d", channel->output);
+               ERR("Unsupported output type for channel \"%s\": mmap output is required to record a snapshot",
+                               channel->name);
                ret = -1;
                goto end;
        }
@@ -234,7 +237,7 @@ int lttng_kconsumer_snapshot_channel(struct lttng_consumer_channel *channel,
                                produced_pos, nb_packets_per_stream,
                                stream->max_sb_size);
 
-               while (consumed_pos < produced_pos) {
+               while ((long) (consumed_pos - produced_pos) < 0) {
                        ssize_t read_len;
                        unsigned long len, padded_len;
 
@@ -1174,7 +1177,7 @@ int lttng_kconsumer_recv_cmd(struct lttng_consumer_local_data *ctx,
 
                if (pending < 0) {
                        /*
-                        * An error occured while running the command;
+                        * An error occurred while running the command;
                         * don't send the 'pending' flag as the sessiond
                         * will not read it.
                         */
@@ -1218,7 +1221,7 @@ int lttng_kconsumer_recv_cmd(struct lttng_consumer_local_data *ctx,
 
                if (pending < 0) {
                        /*
-                        * An error occured while running the command;
+                        * An error occurred while running the command;
                         * don't send the 'pending' flag as the sessiond
                         * will not read it.
                         */
@@ -1257,6 +1260,19 @@ int lttng_kconsumer_recv_cmd(struct lttng_consumer_local_data *ctx,
                }
                break;
        }
+       case LTTNG_CONSUMER_INIT:
+       {
+               ret_code = lttng_consumer_init_command(ctx,
+                               msg.u.init.sessiond_uuid);
+
+               health_code_update();
+               ret = consumer_send_status_msg(sock, ret_code);
+               if (ret < 0) {
+                       /* Somehow, the session daemon is not responding anymore. */
+                       goto end_nosignal;
+               }
+               break;
+       }
        default:
                goto end_nosignal;
        }
This page took 0.026137 seconds and 5 git commands to generate.