Ævar Arnfjörð Bjarmason <avarab@xxxxxxxxx> writes: > Add release functions for "struct module_list", "struct > submodule_update_clone" and "struct update_data". For now we're > leaving some of the "struct update_data" members, we'll deal with > those in a subsequent commit. > > Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@xxxxxxxxx> > --- > diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c > index 2099c5774b2..a964dbeec38 100644 > --- a/builtin/submodule--helper.c > +++ b/builtin/submodule--helper.c > @@ -1910,6 +1921,13 @@ struct submodule_update_clone { > }; > #define SUBMODULE_UPDATE_CLONE_INIT { 0 } > > +static void submodule_update_clone_release(struct submodule_update_clone *suc) > +{ > + /* Not "update_data", owned by update_data_release() */ > + free(suc->update_clone); > + free(suc->failed_clones); > +} > + To make this ownership clearer, should we also make submodule_update_clone.update_data const? i.e. diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c index a964dbeec3..79fd901e5a 100644 --- a/builtin/submodule--helper.c +++ b/builtin/submodule--helper.c @@ -1906,7 +1906,7 @@ struct submodule_update_clone { int current; /* configuration parameters which are passed on to the children */ - struct update_data *update_data; + const struct update_data *update_data; /* to be consumed by update_submodule() */ struct update_clone_data *update_clone; @@ -2003,7 +2003,7 @@ static int prepare_to_clone_next_submodule(const struct cache_entry *ce, const char *update_string; enum submodule_update_type update_type; char *key; - struct update_data *ud = suc->update_data; + const struct update_data *ud = suc->update_data; char *displaypath = get_submodule_displaypath(ce->name, ud->prefix); struct strbuf sb = STRBUF_INIT; int needs_cloning = 0;