Alex Henrie <alexhenrie24@xxxxxxxxx> writes: > +void graph_clear(struct git_graph *graph) > +{ > + if (!graph) > + return; > + > + free(graph->columns); > + free(graph->new_columns); > + free(graph->mapping); > + free(graph->old_mapping); These four are pointer members that graph_init() allocates storage for, so releasing resources held by these four members in clear() makes it symmetrical. The .columns and .new_columns members are arrays of "struct column", but each element in the array does not own any external memory, so freeing the arrays is sufficient. The .mapping and .old_mapping members are arrays of int and freeing them is also sufficient. Looking good. > + free(graph); > +} > + > static void graph_update_state(struct git_graph *graph, enum graph_state s) > { > graph->prev_state = graph->state; > diff --git a/graph.h b/graph.h > index 8313e293c7..e88632a014 100644 > --- a/graph.h > +++ b/graph.h > @@ -139,6 +139,11 @@ void graph_set_column_colors(const char **colors, unsigned short colors_max); > */ > struct git_graph *graph_init(struct rev_info *opt); > > +/* > + * Free a struct git_graph. > + */ > +void graph_clear(struct git_graph *graph); > + > /* > * Update a git_graph with a new commit. > * This will cause the graph to begin outputting lines for the new commit > diff --git a/revision.c b/revision.c > index ad4286fbdd..816061f3d9 100644 > --- a/revision.c > +++ b/revision.c > @@ -2426,6 +2426,7 @@ static int handle_revision_opt(struct rev_info *revs, int argc, const char **arg > } else if (!strcmp(arg, "--graph")) { > revs->topo_order = 1; > revs->rewrite_parents = 1; > + graph_clear(revs->graph); > revs->graph = graph_init(revs); Makes sense. Will queue. > } else if (!strcmp(arg, "--encode-email-headers")) { > revs->encode_email_headers = 1;