From 245f8bec36f63ba93143f9d5fc346553ce1dbe0a Mon Sep 17 00:00:00 2001 From: Jonathan Rajotte Date: Mon, 10 Sep 2018 20:09:11 -0400 Subject: [PATCH] Fix: double put on error path MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Let relay_index_try_flush be responsible for the self-reference put on error path. Code flow of relay_index_try_flush is a bit tricky but the only error flow (via relay_index_file_write) will always mark the index as flushed and perform the self-reference put. Signed-off-by: Jonathan Rajotte Signed-off-by: Jérémie Galarneau --- src/bin/lttng-relayd/main.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/bin/lttng-relayd/main.c b/src/bin/lttng-relayd/main.c index 5a3bcb43f..5f56ba9b3 100644 --- a/src/bin/lttng-relayd/main.c +++ b/src/bin/lttng-relayd/main.c @@ -2318,8 +2318,13 @@ static int relay_recv_index(const struct lttcomm_relayd_hdr *recv_hdr, /* no flush. */ ret = 0; } else { + /* + * ret < 0 + * + * relay_index_try_flush is responsible for the self-reference + * put of the index object on error. + */ ERR("relay_index_try_flush error %d", ret); - relay_index_put(index); ret = -1; } @@ -3217,9 +3222,13 @@ static int handle_index_data(struct relay_stream *stream, uint64_t net_seq_num, /* No flush. */ ret = 0; } else { - /* Put self-ref for this index due to error. */ - relay_index_put(index); - index = NULL; + /* + * ret < 0 + * + * relay_index_try_flush is responsible for the self-reference + * put of the index object on error. + */ + ERR("relay_index_try_flush error %d", ret); ret = -1; } end: -- 2.34.1