]> git.ipfire.org Git - thirdparty/git.git/commit - config.c
config: free resources of `struct config_store_data`
authorMartin Ågren <martin.agren@gmail.com>
Sun, 20 May 2018 10:42:33 +0000 (12:42 +0200)
committerJunio C Hamano <gitster@pobox.com>
Mon, 21 May 2018 04:57:54 +0000 (13:57 +0900)
commit2a00e594e5c589d05da250eb622273977eb06ad0
treec9cf3f4034a6a73180241d4a6cb8c2b6497ec886
parentccdcbd54c4475c2238b310f7113ab3075b5abc9c
config: free resources of `struct config_store_data`

Commit fee8572c6d (config: avoid using the global variable `store`,
2018-04-09) dropped the staticness of a certain struct, instead letting
the users create an instance on the stack and pass around a pointer.

We do not free all the memory that the struct tracks. When the struct
was static, the memory would always be reachable. Now that we keep the
struct on the stack, though, as soon as we return, it goes out of scope
and we leak the memory it points to. In particular, we leak the memory
pointed to by the `parsed` and `seen` fields.

Introduce and use a helper function `config_store_data_clear()` to plug
these leaks. The memory tracked here is config parser events. Once the
users (`git_config_set_multivar_in_file_gently()` and
`git_config_copy_or_rename_section_in_file()` at the moment) are done,
no-one should be holding on to a pointer into this memory.

There are two more members of the struct that are candidates for freeing
in this new function (`key` and `value_regex`). Those are actually
already being taken care of. The next couple of patches will move their
freeing into the function we are adding here.

Signed-off-by: Martin Ågren <martin.agren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
config.c