From 74ae08217b1cab0a1eec4c40bc9f4aa2ae0fe399 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=A9mie=20Galarneau?= Date: Fri, 6 Jul 2018 18:44:41 -0400 Subject: [PATCH] Fix: unbalanced fd references MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Jérémie Galarneau --- src/bin/lttng-relayd/live.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/bin/lttng-relayd/live.c b/src/bin/lttng-relayd/live.c index 9bb719ef6..066dc879e 100644 --- a/src/bin/lttng-relayd/live.c +++ b/src/bin/lttng-relayd/live.c @@ -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); } -- 2.34.1