object_array: use `object_array_clear()`, not `free()`
commitdcb572ab94f83a1a857d276fcebff5700077f2b7
authorMartin Ågren <martin.agren@gmail.com>
Fri, 22 Sep 2017 23:34:52 +0000 (23 01:34 +0200)
committerJunio C Hamano <gitster@pobox.com>
Sun, 24 Sep 2017 01:06:01 +0000 (24 10:06 +0900)
tree2ab4004547e87a0a54c3e403f746a0dd27c00744
parentb2ccdf7fc15e866a883b706540055b5d05fb9aef
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>
builtin/reflog.c
diff-lib.c
submodule.c
upload-pack.c