Fix: UST should not generate packet at destroy after stop
[lttng-tools.git] / src / bin / lttng-sessiond / consumer.c
index fcda59363dfb23019aa793dd244c400c044296de..6ee3975792bb061b46035d6d7b5923af1ab6fd0f 100644 (file)
@@ -563,6 +563,8 @@ struct consumer_output *consumer_copy_output(struct consumer_output *obj)
        output->net_seq_index = obj->net_seq_index;
        memcpy(output->subdir, obj->subdir, PATH_MAX);
        output->snapshot = obj->snapshot;
+       output->relay_major_version = obj->relay_major_version;
+       output->relay_minor_version = obj->relay_minor_version;
        memcpy(&output->dst, &obj->dst, sizeof(output->dst));
        ret = consumer_copy_sockets(output, obj);
        if (ret < 0) {
@@ -713,7 +715,10 @@ int consumer_set_network_uri(struct consumer_output *obj,
                        goto error;
                }
 
-               strncpy(obj->subdir, tmp_path, sizeof(obj->subdir));
+               if (lttng_strncpy(obj->subdir, tmp_path, sizeof(obj->subdir))) {
+                       ret = -LTTNG_ERR_INVALID;
+                       goto error;
+               }
                DBG3("Consumer set network uri subdir path %s", tmp_path);
        }
 
@@ -1084,7 +1089,11 @@ int consumer_set_subdir(struct consumer_output *consumer,
                goto error;
        }
 
-       strncpy(consumer->subdir, tmp_path, sizeof(consumer->subdir));
+       if (lttng_strncpy(consumer->subdir, tmp_path,
+                       sizeof(consumer->subdir))) {
+               ret = -EINVAL;
+               goto error;
+       }
        DBG2("Consumer subdir set to %s", consumer->subdir);
 
 error:
@@ -1182,6 +1191,38 @@ end:
        return ret;
 }
 
+/*
+ * Send a clear quiescent command to consumer using the given channel key.
+ *
+ * Return 0 on success else a negative value.
+ */
+int consumer_clear_quiescent_channel(struct consumer_socket *socket, uint64_t key)
+{
+       int ret;
+       struct lttcomm_consumer_msg msg;
+
+       assert(socket);
+
+       DBG2("Consumer clear quiescent channel key %" PRIu64, key);
+
+       memset(&msg, 0, sizeof(msg));
+       msg.cmd_type = LTTNG_CONSUMER_CLEAR_QUIESCENT_CHANNEL;
+       msg.u.clear_quiescent_channel.key = key;
+
+       pthread_mutex_lock(socket->lock);
+       health_code_update();
+
+       ret = consumer_send_msg(socket, &msg);
+       if (ret < 0) {
+               goto end;
+       }
+
+end:
+       health_code_update();
+       pthread_mutex_unlock(socket->lock);
+       return ret;
+}
+
 /*
  * Send a close metadata command to consumer using the given channel key.
  * Called with registry lock held.
@@ -1257,7 +1298,7 @@ end:
  */
 int consumer_push_metadata(struct consumer_socket *socket,
                uint64_t metadata_key, char *metadata_str, size_t len,
-               size_t target_offset)
+               size_t target_offset, uint64_t version)
 {
        int ret;
        struct lttcomm_consumer_msg msg;
@@ -1273,6 +1314,7 @@ int consumer_push_metadata(struct consumer_socket *socket,
        msg.u.push_metadata.key = metadata_key;
        msg.u.push_metadata.target_offset = target_offset;
        msg.u.push_metadata.len = len;
+       msg.u.push_metadata.version = version;
 
        health_code_update();
        ret = consumer_send_msg(socket, &msg);
This page took 0.025162 seconds and 4 git commands to generate.