From d1d6606181b5295bd16e481c9fb40a4402e91567 Mon Sep 17 00:00:00 2001 From: Julien Desfossez Date: Thu, 14 Nov 2013 20:49:57 -0500 Subject: [PATCH] Protect the abort_flag on reset and always close on rotate Fixes CID 1128897 and a case where the read_fd might not be closed when the abort flag is set. Signed-off-by: Julien Desfossez Signed-off-by: David Goulet --- src/bin/lttng-relayd/live.c | 34 +++++++++++++++------------------- 1 file changed, 15 insertions(+), 19 deletions(-) diff --git a/src/bin/lttng-relayd/live.c b/src/bin/lttng-relayd/live.c index 480c459ce..a2fd09e32 100644 --- a/src/bin/lttng-relayd/live.c +++ b/src/bin/lttng-relayd/live.c @@ -802,26 +802,22 @@ int rotate_viewer_stream(struct relay_viewer_stream *viewer_stream, } viewer_stream->tracefile_count_current = tracefile_id; - if (viewer_stream->abort_flag == 0) { - if (viewer_stream->index_read_fd > 0) { - ret = close(viewer_stream->index_read_fd); - if (ret < 0) { - PERROR("close index file %d", - viewer_stream->index_read_fd); - } - viewer_stream->index_read_fd = -1; - } - if (viewer_stream->read_fd > 0) { - ret = close(viewer_stream->read_fd); - if (ret < 0) { - PERROR("close tracefile %d", - viewer_stream->read_fd); - } - viewer_stream->read_fd = -1; - } - } else { - viewer_stream->abort_flag = 0; + ret = close(viewer_stream->index_read_fd); + if (ret < 0) { + PERROR("close index file %d", + viewer_stream->index_read_fd); + } + viewer_stream->index_read_fd = -1; + ret = close(viewer_stream->read_fd); + if (ret < 0) { + PERROR("close tracefile %d", + viewer_stream->read_fd); } + viewer_stream->read_fd = -1; + + pthread_mutex_lock(&viewer_stream->overwrite_lock); + viewer_stream->abort_flag = 0; + pthread_mutex_unlock(&viewer_stream->overwrite_lock); viewer_stream->index_read_fd = -1; viewer_stream->read_fd = -1; -- 2.34.1