[lttng-dev] [PATCH lttng-tools] Fix: double put on error path
Jérémie Galarneau
jeremie.galarneau at efficios.com
Wed Sep 19 11:52:05 EDT 2018
Merged in master, stable-2.11, stable-2.10, and stable-2.9.
Thanks!
Jérémie
On Mon, Sep 10, 2018 at 08:09:11PM -0400, Jonathan Rajotte wrote:
> 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 <jonathan.rajotte-julien at efficios.com>
> ---
> src/bin/lttng-relayd/main.c | 13 +++++++++----
> 1 file changed, 9 insertions(+), 4 deletions(-)
>
> diff --git a/src/bin/lttng-relayd/main.c b/src/bin/lttng-relayd/main.c
> index 5a3bcb43f..2e2f5839f 100644
> --- a/src/bin/lttng-relayd/main.c
> +++ b/src/bin/lttng-relayd/main.c
> @@ -2318,8 +2318,11 @@ static int relay_recv_index(const struct lttcomm_relayd_hdr *recv_hdr,
> /* no flush. */
> ret = 0;
> } else {
> + /*
> + * 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 +3220,11 @@ 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;
> + /*
> + * 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.17.1
>
More information about the lttng-dev
mailing list