diff options
author | Ævar Arnfjörð Bjarmason <avarab@gmail.com> | 2022-03-04 18:32:14 (GMT) |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2022-03-04 21:24:19 (GMT) |
commit | ef3fe214484f79afdad4204d56e0ee7ff6e85a0f (patch) | |
tree | 8b092aee35aad647d502c7b5e862a0f88add5e8a /commit-graph.c | |
parent | 51a94d8ffe57ff40e1db1d5e46a1864a5ded7f49 (diff) | |
download | git-ef3fe214484f79afdad4204d56e0ee7ff6e85a0f.zip git-ef3fe214484f79afdad4204d56e0ee7ff6e85a0f.tar.gz git-ef3fe214484f79afdad4204d56e0ee7ff6e85a0f.tar.bz2 |
lockfile API users: simplify and don't leak "path"
Fix a memory leak in code added in 6c622f9f0bb (commit-graph: write
commit-graph chains, 2019-06-18). We needed to free the "lock_name" if
we encounter errors, and the "graph_name" after we'd run unlink() on
it.
For the case of write_commit_graph_file() refactoring the code to free
the "lock_name" after we were done using the "struct lock_file lk"
would have made the control flow more complex. Luckily we can free the
"lock_file" right after the hold_lock_file_for_update() call, if it
makes use of "path" at all it'll have copied its contents to a "struct
strbuf" of its own.
While I'm at it let's fix code added in fb10ca5b543 (sparse-checkout:
write using lockfile, 2019-11-21) in write_patterns_and_update() to
avoid the same complexity that I thought I needed when I wrote the
initial fix for write_commit_graph_file(). We can free the
"sparse_filename" right after calling hold_lock_file_for_update(), we
don't need to wait until we're exiting the function to do so.
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'commit-graph.c')
-rw-r--r-- | commit-graph.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/commit-graph.c b/commit-graph.c index aab0b29..b8cde7e 100644 --- a/commit-graph.c +++ b/commit-graph.c @@ -1854,6 +1854,7 @@ static int write_commit_graph_file(struct write_commit_graph_context *ctx) hold_lock_file_for_update_mode(&lk, lock_name, LOCK_DIE_ON_ERROR, 0444); + free(lock_name); fd = git_mkstemp_mode(ctx->graph_name, 0444); if (fd < 0) { @@ -1978,6 +1979,7 @@ static int write_commit_graph_file(struct write_commit_graph_context *ctx) } else { char *graph_name = get_commit_graph_filename(ctx->odb); unlink(graph_name); + free(graph_name); } ctx->commit_graph_hash_after[ctx->num_commit_graphs_after - 1] = xstrdup(hash_to_hex(file_hash)); |