Allocate cached_refs objects dynamically

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Michael Haggerty 2011-08-13 00:36:27 +02:00 committed by Junio C Hamano
parent db4dd93a4a
commit e5dbf6056f

28
refs.c
View File

@ -157,7 +157,7 @@ static struct cached_refs {
char did_packed; char did_packed;
struct ref_list *loose; struct ref_list *loose;
struct ref_list *packed; struct ref_list *packed;
} cached_refs, submodule_refs; } *cached_refs, *submodule_refs;
static struct ref_list *current_ref; static struct ref_list *current_ref;
static struct ref_list *extra_refs; static struct ref_list *extra_refs;
@ -181,6 +181,15 @@ static void clear_cached_refs(struct cached_refs *ca)
ca->did_loose = ca->did_packed = 0; ca->did_loose = ca->did_packed = 0;
} }
struct cached_refs *create_cached_refs(void)
{
struct cached_refs *refs;
refs = xmalloc(sizeof(struct cached_refs));
refs->did_loose = refs->did_packed = 0;
refs->loose = refs->packed = NULL;
return refs;
}
/* /*
* Return a pointer to a cached_refs for the specified submodule. For * Return a pointer to a cached_refs for the specified submodule. For
* the main repository, use submodule==NULL. The returned structure * the main repository, use submodule==NULL. The returned structure
@ -189,12 +198,17 @@ static void clear_cached_refs(struct cached_refs *ca)
*/ */
static struct cached_refs *get_cached_refs(const char *submodule) static struct cached_refs *get_cached_refs(const char *submodule)
{ {
if (!submodule) if (!submodule) {
return &cached_refs; if (!cached_refs)
else { cached_refs = create_cached_refs();
/* For now, don't reuse the refs cache for submodules. */ return cached_refs;
clear_cached_refs(&submodule_refs); } else {
return &submodule_refs; if (!submodule_refs)
submodule_refs = create_cached_refs();
else
/* For now, don't reuse the refs cache for submodules. */
clear_cached_refs(submodule_refs);
return submodule_refs;
} }
} }