Backport: Fix: unbalanced fd references
authorJérémie Galarneau <jeremie.galarneau@efficios.com>
Fri, 6 Jul 2018 22:44:41 +0000 (18:44 -0400)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Fri, 6 Jul 2018 23:17:55 +0000 (19:17 -0400)
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
src/bin/lttng-relayd/live.c

index 289b7655a9956230c7fd3d5b47f8a4c1d8c04b97..c7596a264cd842b505ea336b251ea86fd2726887 100644 (file)
@@ -1556,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;
@@ -1602,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),
@@ -1617,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);
 
@@ -1657,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);
        }
@@ -1747,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
@@ -1764,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);
 
@@ -1795,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.028665 seconds and 5 git commands to generate.