X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fbin%2Flttng-relayd%2Flive.c;h=066dc879e33addd205bd8ac302d64432aeac7116;hb=74ae08217b1cab0a1eec4c40bc9f4aa2ae0fe399;hp=38f19f0c289f8a224541ef9cf04043c1078bd326;hpb=064bcffc6febc39f3e4f25fe1fa7e9b7e8718371;p=deliverable%2Flttng-tools.git diff --git a/src/bin/lttng-relayd/live.c b/src/bin/lttng-relayd/live.c index 38f19f0c2..066dc879e 100644 --- a/src/bin/lttng-relayd/live.c +++ b/src/bin/lttng-relayd/live.c @@ -47,7 +47,6 @@ #include #include #include -#include #include #include #include @@ -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); @@ -1455,12 +1455,8 @@ int viewer_get_next_index(struct relay_connection *conn) if (ret < 0) { goto error_put; } - ret = open(fullpath, O_RDONLY); - if (ret < 0) { - PERROR("Relay opening trace file"); - goto error_put; - } - vstream->stream_fd = stream_fd_create(ret); + + vstream->stream_fd = stream_fd_open(fullpath); if (!vstream->stream_fd) { if (close(ret)) { PERROR("close"); @@ -1477,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 { @@ -1561,7 +1556,7 @@ error_put: static int viewer_get_packet(struct relay_connection *conn) { - int ret; + int ret, stream_fd = -1; off_t lseek_ret; char *reply = NULL; struct lttng_viewer_get_packet get_packet_info; @@ -1604,19 +1599,23 @@ int viewer_get_packet(struct relay_connection *conn) } pthread_mutex_lock(&vstream->stream->lock); - lseek_ret = lseek(vstream->stream_fd->fd, be64toh(get_packet_info.offset), - SEEK_SET); + stream_fd = stream_fd_get_fd(vstream->stream_fd); + if (stream_fd < 0) { + ERR("Failed to get viewer stream file descriptor"); + 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, vstream->stream_fd->fd, + PERROR("lseek fd %d to offset %" PRIu64, stream_fd, (uint64_t) be64toh(get_packet_info.offset)); goto error; } - read_len = lttng_read(vstream->stream_fd->fd, + read_len = lttng_read(stream_fd, reply + sizeof(reply_header), packet_data_len); if (read_len < packet_data_len) { PERROR("Relay reading trace file, fd: %d, offset: %" PRIu64, - vstream->stream_fd->fd, + stream_fd, (uint64_t) be64toh(get_packet_info.offset)); goto error; } @@ -1656,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); } @@ -1670,7 +1672,7 @@ end: static int viewer_get_metadata(struct relay_connection *conn) { - int ret = 0; + int ret = 0, stream_fd = -1; ssize_t read_len; uint64_t len = 0; char *data = NULL; @@ -1730,16 +1732,9 @@ int viewer_get_metadata(struct relay_connection *conn) if (ret < 0) { goto error; } - ret = open(fullpath, O_RDONLY); - if (ret < 0) { - PERROR("Relay opening metadata file"); - goto error; - } - vstream->stream_fd = stream_fd_create(ret); + vstream->stream_fd = stream_fd_open(fullpath); if (!vstream->stream_fd) { - if (close(ret)) { - PERROR("close"); - } + PERROR("Failed to open viewer stream file at %s", fullpath); goto error; } } @@ -1751,7 +1746,11 @@ int viewer_get_metadata(struct relay_connection *conn) goto error; } - read_len = lttng_read(vstream->stream_fd->fd, data, len); + stream_fd = stream_fd_get_fd(vstream->stream_fd); + if (stream_fd < 0) { + goto error; + } + read_len = lttng_read(stream_fd, data, len); if (read_len < len) { PERROR("Relay reading metadata file"); goto error; @@ -1766,7 +1765,6 @@ int viewer_get_metadata(struct relay_connection *conn) reply.status = htobe32(LTTNG_VIEWER_METADATA_OK); goto send_reply; - 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); }