]> git.ipfire.org Git - thirdparty/git.git/commit
diff: improve lifecycle management of diff queues
authorPatrick Steinhardt <ps@pks.im>
Mon, 30 Sep 2024 09:13:45 +0000 (11:13 +0200)
committerJunio C Hamano <gitster@pobox.com>
Mon, 30 Sep 2024 18:23:05 +0000 (11:23 -0700)
commita5aecb2cdc8c5f2c1501bdbe30c02959948d8442
treef4476a4632550a7b28d237b43f530f0cbe9d822f
parentfdf972a9df19915ef7bddf447bfecbcd0d8aea17
diff: improve lifecycle management of diff queues

The lifecycle management of diff queues is somewhat confusing:

  - For most of the part this can be attributed to `DIFF_QUEUE_CLEAR()`,
    which does not release any memory but rather initializes the queue,
    only. This is in contrast to our common naming schema, where
    "clearing" means that we release underlying memory and then
    re-initialize the data structure such that it is ready to use.

  - A second offender is `diff_free_queue()`, which does not free the
    queue structure itself. It is rather a release-style function.

Refactor the code to make things less confusing. `DIFF_QUEUE_CLEAR()` is
replaced by `DIFF_QUEUE_INIT` and `diff_queue_init()`, while
`diff_free_queue()` is replaced by `diff_queue_release()`. While on it,
adapt callsites where we call `DIFF_QUEUE_CLEAR()` with the intent to
release underlying memory to instead call `diff_queue_clear()` to fix
memory leaks.

This memory leak is exposed by t4211, but plugging it alone does not
make the whole test suite pass.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
bloom.c
diff.c
diffcore-break.c
diffcore-pickaxe.c
diffcore-rename.c
diffcore-rotate.c
diffcore.h
line-log.c
log-tree.c
merge-ort.c