Backport: Fix: unbalanced fd references
[deliverable/lttng-tools.git] / src / bin / lttng-relayd / live.c
index bf2895542c5671890d2e2717248ee44fb43f569c..c7596a264cd842b505ea336b251ea86fd2726887 100644 (file)
@@ -47,7 +47,6 @@
 #include <common/compat/endian.h>
 #include <common/defaults.h>
 #include <common/futex.h>
-#include <common/index/index.h>
 #include <common/sessiond-comm/sessiond-comm.h>
 #include <common/sessiond-comm/inet.h>
 #include <common/sessiond-comm/relayd.h>
@@ -67,6 +66,7 @@
 #include "ctf-trace.h"
 #include "connection.h"
 #include "viewer-session.h"
+#include "index-file.h"
 
 #define SESSION_BUF_DEFAULT_COUNT      16
 
@@ -1231,7 +1231,7 @@ static int try_open_index(struct relay_viewer_stream *vstream,
                ret = -ENOENT;
                goto end;
        }
-       vstream->index_file = lttng_index_file_open(vstream->path_name,
+       vstream->index_file = relay_index_file_open(vstream->path_name,
                        vstream->channel_name,
                        vstream->stream->tracefile_count,
                        vstream->current_tracefile_id);
@@ -1473,10 +1473,9 @@ int viewer_get_next_index(struct relay_connection *conn)
                viewer_index.flags |= LTTNG_VIEWER_FLAG_NEW_STREAM;
        }
 
-       ret = lttng_index_file_read(vstream->index_file, &packet_index);
+       ret = relay_index_file_read(vstream->index_file, &packet_index);
        if (ret) {
-               ERR("Relay error reading index file %d",
-                               vstream->index_file->fd);
+               ERR("Relay error reading index file");
                viewer_index.status = htobe32(LTTNG_VIEWER_INDEX_ERR);
                goto send_reply;
        } else {
@@ -1557,7 +1556,7 @@ error_put:
 static
 int viewer_get_packet(struct relay_connection *conn)
 {
-       int ret, stream_fd;
+       int ret, stream_fd = -1;
        off_t lseek_ret;
        char *reply = NULL;
        struct lttng_viewer_get_packet get_packet_info;
@@ -1603,13 +1602,13 @@ int viewer_get_packet(struct relay_connection *conn)
        stream_fd = stream_fd_get_fd(vstream->stream_fd);
        if (stream_fd < 0) {
                ERR("Failed to get viewer stream file descriptor");
-               goto error_put_fd;
+               goto error;
        }
        lseek_ret = lseek(stream_fd, be64toh(get_packet_info.offset), SEEK_SET);
        if (lseek_ret < 0) {
                PERROR("lseek fd %d to offset %" PRIu64, stream_fd,
                        (uint64_t) be64toh(get_packet_info.offset));
-               goto error_put_fd;
+               goto error;
        }
        read_len = lttng_read(stream_fd,
                        reply + sizeof(reply_header),
@@ -1618,14 +1617,12 @@ int viewer_get_packet(struct relay_connection *conn)
                PERROR("Relay reading trace file, fd: %d, offset: %" PRIu64,
                                stream_fd,
                                (uint64_t) be64toh(get_packet_info.offset));
-               goto error_put_fd;
+               goto error;
        }
        reply_header.status = htobe32(LTTNG_VIEWER_GET_PACKET_OK);
        reply_header.len = htobe32(packet_data_len);
        goto send_reply;
 
-error_put_fd:
-       stream_fd_put_fd(vstream->stream_fd);
 error:
        reply_header.status = htobe32(LTTNG_VIEWER_GET_PACKET_ERR);
 
@@ -1658,6 +1655,9 @@ send_reply_nolock:
 end_free:
        free(reply);
 end:
+       if (stream_fd >= 0) {
+               stream_fd_put_fd(vstream->stream_fd);
+       }
        if (vstream) {
                viewer_stream_put(vstream);
        }
@@ -1748,12 +1748,12 @@ int viewer_get_metadata(struct relay_connection *conn)
 
        stream_fd = stream_fd_get_fd(vstream->stream_fd);
        if (stream_fd < 0) {
-               goto error_put_fd;
+               goto error;
        }
        read_len = lttng_read(stream_fd, data, len);
        if (read_len < len) {
                PERROR("Relay reading metadata file");
-               goto error_put_fd;
+               goto error;
        }
        vstream->metadata_sent += read_len;
        if (vstream->metadata_sent == vstream->stream->metadata_received
@@ -1765,8 +1765,6 @@ int viewer_get_metadata(struct relay_connection *conn)
        reply.status = htobe32(LTTNG_VIEWER_METADATA_OK);
 
        goto send_reply;
-error_put_fd:
-       (void) stream_fd_put_fd(vstream->stream_fd);
 error:
        reply.status = htobe32(LTTNG_VIEWER_METADATA_ERR);
 
@@ -1796,6 +1794,9 @@ send_reply:
 end_free:
        free(data);
 end:
+       if (stream_fd >= 0) {
+               stream_fd_put_fd(vstream->stream_fd);
+       }
        if (vstream) {
                viewer_stream_put(vstream);
        }
This page took 0.027238 seconds and 5 git commands to generate.