All callees of process_trailers_lists are calling free_arg_item. Just do it in process_trailers_lists itself. Signed-off-by: Paolo Bonzini <pbonzini@xxxxxxxxxx> --- trailer.c | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/trailer.c b/trailer.c index 3ba157ed0..4ba28ae33 100644 --- a/trailer.c +++ b/trailer.c @@ -178,7 +178,6 @@ static struct trailer_item *trailer_from_arg(struct arg_item *arg_tok) new->token = arg_tok->token; new->value = arg_tok->value; arg_tok->token = arg_tok->value = NULL; - free_arg_item(arg_tok); return new; } @@ -271,7 +270,6 @@ static void apply_arg_if_exists(struct trailer_item *in_tok, { switch (arg_tok->conf.if_exists) { case EXISTS_DO_NOTHING: - free_arg_item(arg_tok); break; case EXISTS_REPLACE: apply_item_command(in_tok, arg_tok); @@ -287,15 +285,11 @@ static void apply_arg_if_exists(struct trailer_item *in_tok, apply_item_command(in_tok, arg_tok); if (check_if_different(in_tok, arg_tok, 1, head)) add_arg_to_input_list(on_tok, arg_tok); - else - free_arg_item(arg_tok); break; case EXISTS_ADD_IF_DIFFERENT_NEIGHBOR: apply_item_command(in_tok, arg_tok); if (check_if_different(on_tok, arg_tok, 0, head)) add_arg_to_input_list(on_tok, arg_tok); - else - free_arg_item(arg_tok); break; default: die("BUG: trailer.c: unhandled value %d", @@ -311,7 +305,6 @@ static void apply_arg_if_missing(struct list_head *head, switch (arg_tok->conf.if_missing) { case MISSING_DO_NOTHING: - free_arg_item(arg_tok); break; case MISSING_ADD: where = arg_tok->conf.where; @@ -374,6 +367,8 @@ static void process_trailers_lists(struct list_head *head, if (!applied) apply_arg_if_missing(head, arg_tok); + + free_arg_item(arg_tok); } } -- 2.14.2