odb: refactor `odb_clear()` to `odb_free()`
The function `odb_clear()` releases all resources allocated to an object database and ensures that all fields become zero'd out. Despite its naming though it doesn't really clear the object database so that it becomes ready for reuse afterwards again -- the caller would first have to reinitialize it, and that contradicts the terminology of "clearing" as we have defined it in our coding guidelines. There isn't really only a reason to have "clearing" semantics, either. There's only a single caller of `odb_clear()`, and that caller also ends up freeing the object database structure itself. Refactor the function to have "freeing" semantics instead, so that the structure itself is also freed, which allows us to drop some useless boilerplate to zero out the structure's members. This refactoring reveals that we're trying to close the commit graph multiple times: once directly via `free_commit_graph()`, and once via `odb_close()`. Drop the former call. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>main
parent
9aaba57993
commit
f8bdf3127a
19
odb.c
19
odb.c
|
|
@ -1073,30 +1073,27 @@ static void odb_free_sources(struct object_database *o)
|
||||||
o->source_by_path = NULL;
|
o->source_by_path = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void odb_clear(struct object_database *o)
|
void odb_free(struct object_database *o)
|
||||||
{
|
{
|
||||||
FREE_AND_NULL(o->alternate_db);
|
if (!o)
|
||||||
|
return;
|
||||||
|
|
||||||
|
free(o->alternate_db);
|
||||||
|
|
||||||
oidmap_clear(&o->replace_map, 1);
|
oidmap_clear(&o->replace_map, 1);
|
||||||
pthread_mutex_destroy(&o->replace_mutex);
|
pthread_mutex_destroy(&o->replace_mutex);
|
||||||
|
|
||||||
free_commit_graph(o->commit_graph);
|
|
||||||
o->commit_graph = NULL;
|
|
||||||
o->commit_graph_attempted = 0;
|
|
||||||
|
|
||||||
odb_free_sources(o);
|
odb_free_sources(o);
|
||||||
o->sources_tail = NULL;
|
|
||||||
o->loaded_alternates = 0;
|
|
||||||
|
|
||||||
for (size_t i = 0; i < o->cached_object_nr; i++)
|
for (size_t i = 0; i < o->cached_object_nr; i++)
|
||||||
free((char *) o->cached_objects[i].value.buf);
|
free((char *) o->cached_objects[i].value.buf);
|
||||||
FREE_AND_NULL(o->cached_objects);
|
free(o->cached_objects);
|
||||||
|
|
||||||
odb_close(o);
|
odb_close(o);
|
||||||
packfile_store_free(o->packfiles);
|
packfile_store_free(o->packfiles);
|
||||||
o->packfiles = NULL;
|
|
||||||
|
|
||||||
string_list_clear(&o->submodule_source_paths, 0);
|
string_list_clear(&o->submodule_source_paths, 0);
|
||||||
|
|
||||||
|
free(o);
|
||||||
}
|
}
|
||||||
|
|
||||||
void odb_reprepare(struct object_database *o)
|
void odb_reprepare(struct object_database *o)
|
||||||
|
|
|
||||||
4
odb.h
4
odb.h
|
|
@ -167,7 +167,9 @@ struct object_database {
|
||||||
};
|
};
|
||||||
|
|
||||||
struct object_database *odb_new(struct repository *repo);
|
struct object_database *odb_new(struct repository *repo);
|
||||||
void odb_clear(struct object_database *o);
|
|
||||||
|
/* Free the object database and release all resources. */
|
||||||
|
void odb_free(struct object_database *o);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Close the object database and all of its sources so that any held resources
|
* Close the object database and all of its sources so that any held resources
|
||||||
|
|
|
||||||
|
|
@ -382,8 +382,8 @@ void repo_clear(struct repository *repo)
|
||||||
FREE_AND_NULL(repo->worktree);
|
FREE_AND_NULL(repo->worktree);
|
||||||
FREE_AND_NULL(repo->submodule_prefix);
|
FREE_AND_NULL(repo->submodule_prefix);
|
||||||
|
|
||||||
odb_clear(repo->objects);
|
odb_free(repo->objects);
|
||||||
FREE_AND_NULL(repo->objects);
|
repo->objects = NULL;
|
||||||
|
|
||||||
parsed_object_pool_clear(repo->parsed_objects);
|
parsed_object_pool_clear(repo->parsed_objects);
|
||||||
FREE_AND_NULL(repo->parsed_objects);
|
FREE_AND_NULL(repo->parsed_objects);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue