the_repository is special. One of the special things about it is that it does not allocate a new index_state object like submodules but points to the global the_index variable instead. As a global variable, the_index cannot be free()'d. Add an exception for this in repo_clear(). In the future perhaps we would be able to allocate the_repository's index on heap too. Then we can remove revert this. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> --- I was trying to test the new parsed_object_pool_clear() and found this. repository.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/repository.c b/repository.c index a4848c1bd0..f44733524a 100644 --- a/repository.c +++ b/repository.c @@ -238,7 +238,9 @@ void repo_clear(struct repository *repo) if (repo->index) { discard_index(repo->index); - FREE_AND_NULL(repo->index); + if (repo->index != &the_index) + free(repo->index); + repo->index = NULL; } } -- 2.17.0.705.g3525833791