Stefan Beller <sbeller@xxxxxxxxxx> writes: > `ce` is allocated in make_cache_entry and should be freed if it is not > used any more. refresh_cache_entry as a wrapper around refresh_cache_ent > will either return `ce` or a new updated cache entry which is allocated > to new memory. In that case we need to free `ce` ourselfs. > > Signed-off-by: Stefan Beller <sbeller@xxxxxxxxxx> > --- > read-cache.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/read-cache.c b/read-cache.c > index 8d71860..f72ea9f 100644 > --- a/read-cache.c > +++ b/read-cache.c > @@ -747,6 +747,8 @@ struct cache_entry *make_cache_entry(unsigned int mode, > free(ce); > return NULL; > } else { > + if (ret != ce) > + free(ce); > return ret; > } > } Good, I vaguely recall that we did something similar in another codepath that forgot the fact that refresh_cache_entry() may make the incoming ce unnecessary. As the rule is "if ret is different from ce, then ce must be freed" in this codepath, I wonder if this is easier to read: ret = refresh_cache_entry(ce, ...); if (ret != ce) free(ce); return ret; -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html