diff options
author | Martin Ågren <martin.agren@gmail.com> | 2017-09-23 01:34:52 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2017-09-24 10:06:01 +0900 |
commit | dcb572ab94f83a1a857d276fcebff5700077f2b7 (patch) | |
tree | 2ab4004547e87a0a54c3e403f746a0dd27c00744 /submodule.c | |
parent | b2ccdf7fc15e866a883b706540055b5d05fb9aef (diff) | |
download | git-dcb572ab94f83a1a857d276fcebff5700077f2b7.tar.gz |
object_array: use `object_array_clear()`, not `free()`
Instead of freeing `foo.objects` for an object array `foo` (sometimes
conditionally), call `object_array_clear(&foo)`. This means we don't
poke as much into the implementation, which is already a good thing, but
also that we release the individual entries as well, thereby fixing at
least one memory-leak (in diff-lib.c).
If someone is holding on to a pointer to an element's `name` or `path`,
that is now a dangling pointer, i.e., we'd be turning an unpleasant
situation into an outright bug. To the best of my understanding no such
long-term pointers are being taken.
The way we handle `study` in builting/reflog.c still looks like it might
leak. That will be addressed in the next commit.
Signed-off-by: Martin Ågren <martin.agren@gmail.com>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'submodule.c')
-rw-r--r-- | submodule.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/submodule.c b/submodule.c index 36f45f5a5a..79fd01f7b0 100644 --- a/submodule.c +++ b/submodule.c @@ -1728,7 +1728,7 @@ static int find_first_merges(struct object_array *result, const char *path, add_object_array(merges.objects[i].item, NULL, result); } - free(merges.objects); + object_array_clear(&merges); return result->nr; } @@ -1833,7 +1833,7 @@ int merge_submodule(struct object_id *result, const char *path, print_commit((struct commit *) merges.objects[i].item); } - free(merges.objects); + object_array_clear(&merges); return 0; } |