mirror of
https://github.com/git/git.git
synced 2025-12-12 20:36:24 +01:00
object-file: hide internals when we need to reprepare loose sources
There are two different situations where we have to clear the cache of
loose objects:
- When freeing the loose object source itself to avoid memory leaks.
- When repreparing the loose object source so that any potentially-
stale data is getting evicted from the cache.
The former is already handled by `odb_source_loose_free()`. But the
latter case is still done manually by in `odb_reprepare()`, so we are
leaking internals into that code.
Introduce a new `odb_source_loose_reprepare()` function as an equivalent
to `packfile_store_prepare()` to hide these implementation details.
Furthermore, while at it, rename the function `odb_clear_loose_cache()`
to `odb_source_loose_clear()`.
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
90a93f9dea
commit
be659c97ea
@@ -1834,12 +1834,17 @@ struct oidtree *odb_source_loose_cache(struct odb_source *source,
|
||||
return source->loose->cache;
|
||||
}
|
||||
|
||||
void odb_clear_loose_cache(struct odb_source *source)
|
||||
static void odb_source_loose_clear_cache(struct odb_source_loose *loose)
|
||||
{
|
||||
oidtree_clear(source->loose->cache);
|
||||
FREE_AND_NULL(source->loose->cache);
|
||||
memset(&source->loose->subdir_seen, 0,
|
||||
sizeof(source->loose->subdir_seen));
|
||||
oidtree_clear(loose->cache);
|
||||
FREE_AND_NULL(loose->cache);
|
||||
memset(&loose->subdir_seen, 0,
|
||||
sizeof(loose->subdir_seen));
|
||||
}
|
||||
|
||||
void odb_source_loose_reprepare(struct odb_source *source)
|
||||
{
|
||||
odb_source_loose_clear_cache(source->loose);
|
||||
}
|
||||
|
||||
static int check_stream_oid(git_zstream *stream,
|
||||
@@ -2008,6 +2013,6 @@ void odb_source_loose_free(struct odb_source_loose *loose)
|
||||
{
|
||||
if (!loose)
|
||||
return;
|
||||
odb_clear_loose_cache(loose->source);
|
||||
odb_source_loose_clear_cache(loose);
|
||||
free(loose);
|
||||
}
|
||||
|
||||
@@ -37,6 +37,9 @@ struct odb_source_loose {
|
||||
struct odb_source_loose *odb_source_loose_new(struct odb_source *source);
|
||||
void odb_source_loose_free(struct odb_source_loose *loose);
|
||||
|
||||
/* Reprepare the loose source by emptying the loose object cache. */
|
||||
void odb_source_loose_reprepare(struct odb_source *source);
|
||||
|
||||
/*
|
||||
* Populate and return the loose object cache array corresponding to the
|
||||
* given object ID.
|
||||
@@ -44,9 +47,6 @@ void odb_source_loose_free(struct odb_source_loose *loose);
|
||||
struct oidtree *odb_source_loose_cache(struct odb_source *source,
|
||||
const struct object_id *oid);
|
||||
|
||||
/* Empty the loose object cache for the specified object directory. */
|
||||
void odb_clear_loose_cache(struct odb_source *source);
|
||||
|
||||
/*
|
||||
* Put in `buf` the name of the file in the local object database that
|
||||
* would be used to store a loose object with the specified oid.
|
||||
|
||||
Reference in New Issue
Block a user