summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <junkio@cox.net>2006-06-22 01:37:31 (GMT)
committerJunio C Hamano <junkio@cox.net>2006-06-22 01:37:31 (GMT)
commitfba6e3f039ad51a0a7f152f4948e6bc926bec3c4 (patch)
treeac7782fbcf94cd91a079ec580bc485157ecba812
parent78831b40d6ce24cdbcbfded049cb251097c58c13 (diff)
parent5fdc8499658969e5ed03184f87cb4290541a0763 (diff)
downloadgit-fba6e3f039ad51a0a7f152f4948e6bc926bec3c4.zip
git-fba6e3f039ad51a0a7f152f4948e6bc926bec3c4.tar.gz
git-fba6e3f039ad51a0a7f152f4948e6bc926bec3c4.tar.bz2
Merge branch 'master' into next
* master: Fix grow_refs_hash()
-rw-r--r--object-refs.c30
1 files changed, 14 insertions, 16 deletions
diff --git a/object-refs.c b/object-refs.c
index a7d49c6..b1b8065 100644
--- a/object-refs.c
+++ b/object-refs.c
@@ -12,6 +12,18 @@ static unsigned int hash_obj(struct object *obj, unsigned int n)
return hash % n;
}
+static void insert_ref_hash(struct object_refs *ref, struct object_refs **hash, unsigned int size)
+{
+ int j = hash_obj(ref->base, size);
+
+ while (hash[j]) {
+ j++;
+ if (j >= size)
+ j = 0;
+ }
+ hash[j] = ref;
+}
+
static void grow_refs_hash(void)
{
int i;
@@ -20,30 +32,16 @@ static void grow_refs_hash(void)
new_hash = calloc(new_hash_size, sizeof(struct object_refs *));
for (i = 0; i < refs_hash_size; i++) {
- int j;
struct object_refs *ref = refs_hash[i];
if (!ref)
continue;
- j = hash_obj(ref->base, new_hash_size);
- new_hash[j] = ref;
+ insert_ref_hash(ref, new_hash, new_hash_size);
}
free(refs_hash);
refs_hash = new_hash;
refs_hash_size = new_hash_size;
}
-static void insert_ref_hash(struct object_refs *ref)
-{
- int j = hash_obj(ref->base, refs_hash_size);
-
- while (refs_hash[j]) {
- j++;
- if (j >= refs_hash_size)
- j = 0;
- }
- refs_hash[j] = ref;
-}
-
static void add_object_refs(struct object *obj, struct object_refs *ref)
{
int nr = nr_object_refs + 1;
@@ -51,7 +49,7 @@ static void add_object_refs(struct object *obj, struct object_refs *ref)
if (nr > refs_hash_size * 2 / 3)
grow_refs_hash();
ref->base = obj;
- insert_ref_hash(ref);
+ insert_ref_hash(ref, refs_hash, refs_hash_size);
nr_object_refs = nr;
}