mirror of
https://github.com/git/git.git
synced 2026-03-04 22:47:35 +01:00
odb/source: make close() function pluggable
Introduce a new callback function in `struct odb_source` to make the function pluggable. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
ae48509378
commit
8759a6c258
6
odb.c
6
odb.c
@@ -1062,10 +1062,8 @@ struct object_database *odb_new(struct repository *repo,
|
||||
void odb_close(struct object_database *o)
|
||||
{
|
||||
struct odb_source *source;
|
||||
for (source = o->sources; source; source = source->next) {
|
||||
struct odb_source_files *files = odb_source_files_downcast(source);
|
||||
packfile_store_close(files->packed);
|
||||
}
|
||||
for (source = o->sources; source; source = source->next)
|
||||
odb_source_close(source);
|
||||
close_commit_graph(o);
|
||||
}
|
||||
|
||||
|
||||
@@ -28,6 +28,12 @@ static void odb_source_files_free(struct odb_source *source)
|
||||
free(files);
|
||||
}
|
||||
|
||||
static void odb_source_files_close(struct odb_source *source)
|
||||
{
|
||||
struct odb_source_files *files = odb_source_files_downcast(source);
|
||||
packfile_store_close(files->packed);
|
||||
}
|
||||
|
||||
static void odb_source_files_reprepare(struct odb_source *source)
|
||||
{
|
||||
struct odb_source_files *files = odb_source_files_downcast(source);
|
||||
@@ -47,6 +53,7 @@ struct odb_source_files *odb_source_files_new(struct object_database *odb,
|
||||
files->packed = packfile_store_new(&files->base);
|
||||
|
||||
files->base.free = odb_source_files_free;
|
||||
files->base.close = odb_source_files_close;
|
||||
files->base.reprepare = odb_source_files_reprepare;
|
||||
|
||||
/*
|
||||
|
||||
18
odb/source.h
18
odb/source.h
@@ -59,6 +59,14 @@ struct odb_source {
|
||||
*/
|
||||
void (*free)(struct odb_source *source);
|
||||
|
||||
/*
|
||||
* This callback is expected to close any open resources, like for
|
||||
* example file descriptors or connections. The source is expected to
|
||||
* still be usable after it has been closed. Closed resources may need
|
||||
* to be reopened in that case.
|
||||
*/
|
||||
void (*close)(struct odb_source *source);
|
||||
|
||||
/*
|
||||
* This callback is expected to clear underlying caches of the object
|
||||
* database source. The function is called when the repository has for
|
||||
@@ -104,6 +112,16 @@ void odb_source_free(struct odb_source *source);
|
||||
*/
|
||||
void odb_source_release(struct odb_source *source);
|
||||
|
||||
/*
|
||||
* Close the object database source without releasing he underlying data. The
|
||||
* source can still be used going forward, but it first needs to be reopened.
|
||||
* This can be useful to reduce resource usage.
|
||||
*/
|
||||
static inline void odb_source_close(struct odb_source *source)
|
||||
{
|
||||
source->close(source);
|
||||
}
|
||||
|
||||
/*
|
||||
* Reprepare the object database source and clear any caches. Depending on the
|
||||
* backend used this may have the effect that concurrently-written objects
|
||||
|
||||
Reference in New Issue
Block a user