Fix: fail on relayd lookup when finding a relayd is expected
authorJonathan Rajotte <jonathan.rajotte-julien@efficios.com>
Mon, 24 Apr 2017 19:32:15 +0000 (15:32 -0400)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Mon, 8 May 2017 15:32:29 +0000 (11:32 -0400)
An actual relayd lookup error leads to using the code path of a local
handling. Since stream->index_file is NULL when expecting a relayd, using
the code path for local handling results in an invalid access.

Signed-off-by: Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
src/common/consumer/consumer-stream.c

index 522b3cd5cd8ac0c45876c12dd7e344c8c7c27118..d0b1ddef2259fc57342cac15ef5003f19fc03e6f 100644 (file)
@@ -359,18 +359,24 @@ int consumer_stream_write_index(struct lttng_consumer_stream *stream,
                struct ctf_packet_index *element)
 {
        int ret;
-       struct consumer_relayd_sock_pair *relayd;
 
        assert(stream);
        assert(element);
 
        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, element,
+       if (stream->net_seq_idx != (uint64_t) -1ULL) {
+               struct consumer_relayd_sock_pair *relayd;
+               relayd = consumer_find_relayd(stream->net_seq_idx);
+               if (relayd) {
+                       pthread_mutex_lock(&relayd->ctrl_sock_mutex);
+                       ret = relayd_send_index(&relayd->control_sock, element,
                                stream->relayd_stream_id, stream->next_net_seq_num - 1);
-               pthread_mutex_unlock(&relayd->ctrl_sock_mutex);
+                       pthread_mutex_unlock(&relayd->ctrl_sock_mutex);
+               } else {
+                       ERR("Stream %" PRIu64 " relayd ID %" PRIu64 " unknown. Can't write index.",
+                                       stream->key, stream->net_seq_idx);
+                       ret = -1;
+               }
        } else {
                if (lttng_index_file_write(stream->index_file, element)) {
                        ret = -1;
This page took 0.028068 seconds and 5 git commands to generate.