1
0
Fork 0
mirror of https://github.com/git/git.git synced 2024-05-29 05:06:09 +02:00

Merge branch 'ds/commit-graph-leakfix'

Code clean-up.

* ds/commit-graph-leakfix:
  commit-graph: reduce initial oid allocation
  builtin/commit-graph.c: UNLEAK variables
  commit-graph: clean up leaked memory during write
This commit is contained in:
Junio C Hamano 2018-10-19 13:34:07 +09:00
commit d4cd2dd214
2 changed files with 16 additions and 11 deletions

View File

@ -64,6 +64,7 @@ static int graph_verify(int argc, const char **argv)
if (!graph) if (!graph)
return 0; return 0;
UNLEAK(graph);
return verify_commit_graph(the_repository, graph); return verify_commit_graph(the_repository, graph);
} }
@ -89,10 +90,8 @@ static int graph_read(int argc, const char **argv)
graph_name = get_commit_graph_filename(opts.obj_dir); graph_name = get_commit_graph_filename(opts.obj_dir);
graph = load_commit_graph_one(graph_name); graph = load_commit_graph_one(graph_name);
if (!graph) { if (!graph)
UNLEAK(graph_name);
die("graph file %s does not exist", graph_name); die("graph file %s does not exist", graph_name);
}
FREE_AND_NULL(graph_name); FREE_AND_NULL(graph_name);
@ -115,7 +114,7 @@ static int graph_read(int argc, const char **argv)
printf(" large_edges"); printf(" large_edges");
printf("\n"); printf("\n");
free_commit_graph(graph); UNLEAK(graph);
return 0; return 0;
} }
@ -170,6 +169,8 @@ static int graph_write(int argc, const char **argv)
pack_indexes = &lines; pack_indexes = &lines;
if (opts.stdin_commits) if (opts.stdin_commits)
commit_hex = &lines; commit_hex = &lines;
UNLEAK(buf);
} }
write_commit_graph(opts.obj_dir, write_commit_graph(opts.obj_dir,
@ -178,7 +179,7 @@ static int graph_write(int argc, const char **argv)
opts.append, opts.append,
1); 1);
string_list_clear(&lines, 0); UNLEAK(lines);
return 0; return 0;
} }

View File

@ -739,11 +739,12 @@ static int add_ref_to_list(const char *refname,
void write_commit_graph_reachable(const char *obj_dir, int append, void write_commit_graph_reachable(const char *obj_dir, int append,
int report_progress) int report_progress)
{ {
struct string_list list; struct string_list list = STRING_LIST_INIT_DUP;
string_list_init(&list, 1);
for_each_ref(add_ref_to_list, &list); for_each_ref(add_ref_to_list, &list);
write_commit_graph(obj_dir, NULL, &list, append, report_progress); write_commit_graph(obj_dir, NULL, &list, append, report_progress);
string_list_clear(&list, 0);
} }
void write_commit_graph(const char *obj_dir, void write_commit_graph(const char *obj_dir,
@ -768,7 +769,7 @@ void write_commit_graph(const char *obj_dir,
return; return;
oids.nr = 0; oids.nr = 0;
oids.alloc = approximate_object_count() / 4; oids.alloc = approximate_object_count() / 32;
oids.progress = NULL; oids.progress = NULL;
oids.progress_done = 0; oids.progress_done = 0;
@ -813,6 +814,7 @@ void write_commit_graph(const char *obj_dir,
die(_("error opening index for %s"), packname.buf); die(_("error opening index for %s"), packname.buf);
for_each_object_in_pack(p, add_packed_commits, &oids, 0); for_each_object_in_pack(p, add_packed_commits, &oids, 0);
close_pack(p); close_pack(p);
free(p);
} }
stop_progress(&oids.progress); stop_progress(&oids.progress);
strbuf_release(&packname); strbuf_release(&packname);
@ -895,9 +897,11 @@ void write_commit_graph(const char *obj_dir,
compute_generation_numbers(&commits, report_progress); compute_generation_numbers(&commits, report_progress);
graph_name = get_commit_graph_filename(obj_dir); graph_name = get_commit_graph_filename(obj_dir);
if (safe_create_leading_directories(graph_name)) if (safe_create_leading_directories(graph_name)) {
UNLEAK(graph_name);
die_errno(_("unable to create leading directories of %s"), die_errno(_("unable to create leading directories of %s"),
graph_name); graph_name);
}
hold_lock_file_for_update(&lk, graph_name, LOCK_DIE_ON_ERROR); hold_lock_file_for_update(&lk, graph_name, LOCK_DIE_ON_ERROR);
f = hashfd(lk.tempfile->fd, lk.tempfile->filename.buf); f = hashfd(lk.tempfile->fd, lk.tempfile->filename.buf);
@ -942,9 +946,9 @@ void write_commit_graph(const char *obj_dir,
finalize_hashfile(f, NULL, CSUM_HASH_IN_STREAM | CSUM_FSYNC); finalize_hashfile(f, NULL, CSUM_HASH_IN_STREAM | CSUM_FSYNC);
commit_lock_file(&lk); commit_lock_file(&lk);
free(graph_name);
free(commits.list);
free(oids.list); free(oids.list);
oids.alloc = 0;
oids.nr = 0;
} }
#define VERIFY_COMMIT_GRAPH_ERROR_HASH 2 #define VERIFY_COMMIT_GRAPH_ERROR_HASH 2