Fix: missing lock/unlock when sending index
[lttng-tools.git] / src / common / consumer-stream.c
index 808cae236ded5d142a6c5b962b27e760c41eac2a..745de050d6dd4f7c805d37ec2f1221092fed17ac 100644 (file)
@@ -331,7 +331,7 @@ void consumer_stream_destroy(struct lttng_consumer_stream *stream,
  * Return 0 on success or else a negative value.
  */
 int consumer_stream_write_index(struct lttng_consumer_stream *stream,
-               struct lttng_packet_index *index)
+               struct ctf_packet_index *index)
 {
        int ret;
        struct consumer_relayd_sock_pair *relayd;
@@ -342,11 +342,20 @@ int consumer_stream_write_index(struct lttng_consumer_stream *stream,
        rcu_read_lock();
        relayd = consumer_find_relayd(stream->net_seq_idx);
        if (relayd) {
+               pthread_mutex_lock(&relayd->ctrl_sock_mutex);
                ret = relayd_send_index(&relayd->control_sock, index,
                                stream->relayd_stream_id, stream->next_net_seq_num - 1);
+               pthread_mutex_unlock(&relayd->ctrl_sock_mutex);
        } else {
-               ret = index_write(stream->index_fd, index,
-                               sizeof(struct lttng_packet_index));
+               ssize_t size_ret;
+
+               size_ret = index_write(stream->index_fd, index,
+                               sizeof(struct ctf_packet_index));
+               if (size_ret < sizeof(struct ctf_packet_index)) {
+                       ret = -1;
+               } else {
+                       ret = 0;
+               }
        }
        if (ret < 0) {
                goto error;
This page took 0.025255 seconds and 5 git commands to generate.