Re: [RFC PATCH 05/10] pack-bitmap: don't rely on bitmap_git->reuse_objects
- From
- Jonathan Tan <jonathantanmy@google.com>
- Date
- Oct 10, 2019, 23:44 UTC
- Message-ID
- <20191010234408.170356-1-jonathantanmy@google.com>
- In-Reply-To
- <20190913130226.7449-6-chriscool@tuxfamily.org>
> As we now allocate 2 more words than necessary for each > bitmap to serve as marks telling us that we can stop > iterating over the words, we don't need to rely on > bitmap_git->reuse_objects to stop iterating over the words.
As Peff states [1], this justification is probably incorrect as well. The actual justification seems to be that we will no longer compute reuse_objects (in a future patch), so we cannot rely on it anymore to terminate the loop early; we have to iterate to the end.
[1] https://public-inbox.org/git/20191002155721.GD6116@sigill.intra.peff.net/
Show 26 quoted lines
> @@ -622,7 +622,7 @@ static void show_objects_for_type(
> enum object_type object_type,
> show_reachable_fn show_reach)
> {
> - size_t pos = 0, i = 0;
> + size_t i = 0;
> uint32_t offset;
>
> struct ewah_iterator it;
> @@ -630,13 +630,15 @@ static void show_objects_for_type(
>
> struct bitmap *objects = bitmap_git->result;
>
> - if (bitmap_git->reuse_objects == bitmap_git->pack->num_objects)
> - return;
> -
> ewah_iterator_init(&it, type_filter);
>
> - while (i < objects->word_alloc && ewah_iterator_next(&filter, &it)) {
> + for (i = 0; i < objects->word_alloc &&
> + ewah_iterator_next(&filter, &it); i++) {
> eword_t word = objects->words[i] & filter;
> + size_t pos = (i * BITS_IN_EWORD);
> +
> + if (!word)
> + continue;Here, iteration is not terminated when we see a 0. We just proceed to the next one.