From: Jonathan Tan Date: Thu, 10 Oct 2019 23:44:08 GMT Subject: Re: [RFC PATCH 05/10] pack-bitmap: don't rely on bitmap_git->reuse_objects 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/ > @@ -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.