mirror of
https://github.com/git/git.git
synced 2024-11-24 18:33:43 +08:00
prune_refs(): also free the linked list
At least since v1.7, the elements of the `refs_to_prune` linked list have been leaked. Fix the leak by teaching `prune_refs()` to free the list elements as it processes them. Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
27d03d04d5
commit
22b09cdfad
@ -1057,11 +1057,17 @@ static void prune_ref(struct files_ref_store *refs, struct ref_to_prune *r)
|
||||
strbuf_release(&err);
|
||||
}
|
||||
|
||||
static void prune_refs(struct files_ref_store *refs, struct ref_to_prune *r)
|
||||
/*
|
||||
* Prune the loose versions of the references in the linked list
|
||||
* `*refs_to_prune`, freeing the entries in the list as we go.
|
||||
*/
|
||||
static void prune_refs(struct files_ref_store *refs, struct ref_to_prune **refs_to_prune)
|
||||
{
|
||||
while (r) {
|
||||
while (*refs_to_prune) {
|
||||
struct ref_to_prune *r = *refs_to_prune;
|
||||
*refs_to_prune = r->next;
|
||||
prune_ref(refs, r);
|
||||
r = r->next;
|
||||
free(r);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1148,7 +1154,7 @@ static int files_pack_refs(struct ref_store *ref_store, unsigned int flags)
|
||||
|
||||
packed_refs_unlock(refs->packed_ref_store);
|
||||
|
||||
prune_refs(refs, refs_to_prune);
|
||||
prune_refs(refs, &refs_to_prune);
|
||||
strbuf_release(&err);
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user