diff options
| -rw-r--r-- | object-refs.c | 30 | 
1 files changed, 14 insertions, 16 deletions
| diff --git a/object-refs.c b/object-refs.c index a7d49c60d7..b1b8065851 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;  } | 
