From 237743478e3a7f1008bf33f2e4df3bc078e1987a Mon Sep 17 00:00:00 2001 From: John Darrington Date: Sun, 12 Aug 2012 16:29:38 +0200 Subject: [PATCH] Fixed remaining leaks in ONEWAY --- src/language/stats/oneway.c | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/src/language/stats/oneway.c b/src/language/stats/oneway.c index 2a412a3d7e..13c1625be1 100644 --- a/src/language/stats/oneway.c +++ b/src/language/stats/oneway.c @@ -384,6 +384,22 @@ static void show_homogeneity (const struct oneway_spec *, const struct oneway_wo static void output_oneway (const struct oneway_spec *, struct oneway_workspace *ws); static void run_oneway (const struct oneway_spec *cmd, struct casereader *input, const struct dataset *ds); + +static void +destroy_coeff_list (struct contrasts_node *coeff_list) +{ + struct coeff_node *cn = NULL; + struct coeff_node *cnx = NULL; + struct ll_list *cl = &coeff_list->coefficient_list; + + ll_for_each_safe (cn, cnx, struct coeff_node, ll, cl) + { + free (cn); + } + + free (coeff_list); +} + static void oneway_cleanup (struct oneway_spec *cmd) { @@ -391,16 +407,7 @@ oneway_cleanup (struct oneway_spec *cmd) struct contrasts_node *coeff_next = NULL; ll_for_each_safe (coeff_list, coeff_next, struct contrasts_node, ll, &cmd->contrast_list) { - struct coeff_node *cn = NULL; - struct coeff_node *cnx = NULL; - struct ll_list *cl = &coeff_list->coefficient_list; - - ll_for_each_safe (cn, cnx, struct coeff_node, ll, cl) - { - free (cn); - } - - free (coeff_list); + destroy_coeff_list (coeff_list); } free (cmd->posthoc); @@ -529,6 +536,7 @@ cmd_oneway (struct lexer *lexer, struct dataset *ds) } else { + destroy_coeff_list (cl); lex_error (lexer, NULL); goto error; } @@ -897,6 +905,7 @@ output_oneway (const struct oneway_spec *cmd, struct oneway_workspace *ws) i, ll_count (cl), ws->actual_number_of_groups); ll_remove (&coeff_list->ll); + destroy_coeff_list (coeff_list); continue; } -- 2.30.2