[PATCH v2] repository: fix free problem with repo_clear(the_repository)
- From
Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
- Date
- May 10, 2018, 06:13 UTC
- Message-ID
- <20180510061310.28265-1-pclouds@gmail.com>
- In-Reply-To
- <20180509170409.13666-1-pclouds@gmail.com>
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 revert this.
the_repository->index remains pointed to a clean the_index even after repo_clear() so that it could still be used next time (e.g. in a crazy use case where a dev switches repo in the same process).
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> --- v2 keeps the_repository->index pointed to the_index even after cleared
repository.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/repository.c b/repository.c index a4848c1bd0..4143073f89 100644 --- a/repository.c +++ b/repository.c @@ -238,7 +238,8 @@ void repo_clear(struct repository *repo) if (repo->index) { discard_index(repo->index); - FREE_AND_NULL(repo->index); + if (repo->index != &the_index) + FREE_AND_NULL(repo->index); } }
-- 2.17.0.705.g3525833791