summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRussell Belfer <rb@github.com>2014-05-15 15:31:13 -0700
committerRussell Belfer <rb@github.com>2014-05-15 15:31:13 -0700
commit8e1b5a8dc650c25e818ab7337833bd4d0d45a46e (patch)
tree53b5a8377e68511a631cf3c564844e735723717b
parent88b1b36dfcc6b406f2b6f21e0e042071984b3b90 (diff)
parent649214be4bd9d8239787e3af7e6d877955d09e11 (diff)
downloadlibgit2-8e1b5a8dc650c25e818ab7337833bd4d0d45a46e.tar.gz
Merge pull request #2357 from libgit2/cmn/pack-cache-init
pack: init the cache on packfile alloc
-rw-r--r--src/pack.c15
1 files changed, 7 insertions, 8 deletions
diff --git a/src/pack.c b/src/pack.c
index d93ee25f9..ace7abb58 100644
--- a/src/pack.c
+++ b/src/pack.c
@@ -83,16 +83,12 @@ static void cache_free(git_pack_cache *cache)
}
git_offmap_free(cache->entries);
- git_mutex_free(&cache->lock);
+ cache->entries = NULL;
}
-
- memset(cache, 0, sizeof(*cache));
}
static int cache_init(git_pack_cache *cache)
{
- memset(cache, 0, sizeof(*cache));
-
cache->entries = git_offmap_alloc();
GITERR_CHECK_ALLOC(cache->entries);
@@ -534,9 +530,6 @@ static int pack_dependency_chain(git_dependency_chain *chain_out,
size_t size, elem_pos;
git_otype type;
- if (!p->bases.entries && (cache_init(&p->bases) < 0))
- return -1;
-
elem_pos = 0;
while (true) {
struct pack_chain_elem *elem;
@@ -985,6 +978,7 @@ void git_packfile_free(struct git_pack_file *p)
git__free(p->bad_object_sha1);
git_mutex_free(&p->lock);
+ git_mutex_free(&p->bases.lock);
git__free(p);
}
@@ -1120,6 +1114,11 @@ int git_packfile_alloc(struct git_pack_file **pack_out, const char *path)
return -1;
}
+ if (cache_init(&p->bases) < 0) {
+ git__free(p);
+ return -1;
+ }
+
*pack_out = p;
return 0;