Am 5/1/2013 22:34, schrieb Jeff King:
>  struct object *lookup_object(const unsigned char *sha1)
>  {
> -     unsigned int i;
> +     unsigned int i, first;
>       struct object *obj;
>  
>       if (!obj_hash)
>               return NULL;
>  
> -     i = hashtable_index(sha1);
> +     first = i = hashtable_index(sha1);
>       while ((obj = obj_hash[i]) != NULL) {
>               if (!hashcmp(sha1, obj->sha1))
>                       break;
> @@ -85,6 +85,11 @@ struct object *lookup_object(const unsigned char *sha1)
>               if (i == obj_hash_size)
>                       i = 0;
>       }
> +     if (obj && i != first) {
> +             struct object *tmp = obj_hash[i];
> +             obj_hash[i] = obj_hash[first];
> +             obj_hash[first] = tmp;
> +     }
>       return obj;
>  }

This is one of the places where I think the code does not speak for itself
and a comment is warranted: The new if statement is not about correctness,
but about optimization:

                /*
                 * Move object to where we started to look for it
                 * so that we do not need to walk the hash table
                 * the next time we look for it.
                 */

or something.

-- Hannes
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to