diff --git a/src/engine.c b/src/engine.c index 9b1a1d763357e070b927a555c251276748b39387..df6665fdfce28fa7772bf81f2fb0ccc5da2087e3 100644 --- a/src/engine.c +++ b/src/engine.c @@ -7422,18 +7422,11 @@ void engine_clean(struct engine *e) { } free(e->runners); free(e->snapshot_units); - if (e->output_list_snapshots) { - output_list_clean(e->output_list_snapshots); - free(e->output_list_snapshots); - } - if (e->output_list_stats) { - output_list_clean(e->output_list_stats); - free(e->output_list_stats); - } - if (e->output_list_stf) { - output_list_clean(e->output_list_stf); - free(e->output_list_stf); - } + + output_list_clean(&e->output_list_snapshots); + output_list_clean(&e->output_list_stats); + output_list_clean(&e->output_list_stf); + free(e->links); free(e->cell_loc); scheduler_clean(&e->sched); diff --git a/src/outputlist.c b/src/outputlist.c index fd33370ca45f25c17ecd2cc8df622138842507f3..2ab904d4fd0b7008b324f3c37a5cab6c6b337520 100644 --- a/src/outputlist.c +++ b/src/outputlist.c @@ -112,6 +112,9 @@ void output_list_read_file(struct output_list *outputlist, const char *filename, ind += 1; } + /* Cleanup */ + free(line); + if (ind != outputlist->size) error("Did not read the correct number of output times."); @@ -266,8 +269,12 @@ void output_list_print(const struct output_list *outputlist) { /** * @brief Clean an #output_list */ -void output_list_clean(struct output_list *outputlist) { - free(outputlist->times); +void output_list_clean(struct output_list **outputlist) { + if (*outputlist) { + free((*outputlist)->times); + free(*outputlist); + *outputlist = NULL; + } } /** diff --git a/src/outputlist.h b/src/outputlist.h index 6045d75ea29f0aab44252835147502f3df0de20c..b7b12ca32f469c70f716553b30a15f48198f8e5e 100644 --- a/src/outputlist.h +++ b/src/outputlist.h @@ -58,7 +58,7 @@ void output_list_read_next_time(struct output_list *t, const struct engine *e, void output_list_init(struct output_list **list, const struct engine *e, const char *name, double *delta_time, double *time_first); void output_list_print(const struct output_list *outputlist); -void output_list_clean(struct output_list *outputlist); +void output_list_clean(struct output_list **outputlist); void output_list_struct_dump(struct output_list *list, FILE *stream); void output_list_struct_restore(struct output_list *list, FILE *stream); diff --git a/tests/testOutputList.c b/tests/testOutputList.c index 98e566646fb68c26cbd4f1067c0be64657182038..cd9c62c3abc7462406950e24fa330788b76ed249 100644 --- a/tests/testOutputList.c +++ b/tests/testOutputList.c @@ -76,7 +76,7 @@ void test_no_cosmo(struct engine *e, char *name, int with_assert) { output_time = (double)(ti_next * e->time_base) + e->time_begin; } - output_list_clean(list); + output_list_clean(&list); }; void test_cosmo(struct engine *e, char *name, int with_assert) { @@ -112,7 +112,7 @@ void test_cosmo(struct engine *e, char *name, int with_assert) { output_time = (double)exp(ti_next * e->time_base) * e->cosmology->a_begin; } - output_list_clean(list); + output_list_clean(&list); }; int main(int argc, char *argv[]) { diff --git a/tests/testParser.c b/tests/testParser.c index 3944e86fa19a1f623623383eabefe1094bf5addf..84ce70ff44fad0482573c740d5a174285655c08d 100644 --- a/tests/testParser.c +++ b/tests/testParser.c @@ -114,6 +114,8 @@ int main(int argc, char *argv[]) { int haveoptwords1 = parser_get_opt_param_string_array( ¶m_file, "Simulation:optwords", &nvar_result, &var_result, noptwords, optwords); + parser_free_param_string_array(nvar_result, var_result); + /* Check if we can read it again */ int haveoptwords2 = parser_get_opt_param_string_array( ¶m_file, "Simulation:optwords", &nvar_result, &var_result, noptwords,